fix(tpv): llc 日志文件句柄初始化改用 NULL,避免整数常量赋给指针类型

_run_cmd_wait 里 log_fh 原以 w32.win32base.INVALID_HANDLE_VALUE 初始化,而该常量是 CDefine = -1(整数),赋给 HANDLE 指针类型触发"整数隐式转指针已禁止"的 fail-fast(BuildPipeline.vp 原 595 行)。

改为以 None(NULL) 初始化;仓库既有惯例是只把 INVALID_HANDLE_VALUE 用于比较(全仓 20 余处同写法),故其余比较判断不变。因 NULL 与 INVALID 都不应参与关闭,父侧 CloseHandle 增加 None 守卫,避免对 NULL 调 CloseHandle。
This commit is contained in:
TermiNexus committed 2026-09-14 21:19:20 +08:00
1 parent 785741026f
commit 82f16127c0
1 file changed
+6 -2
+6 -2
View File
@@ -592,7 +592,10 @@ def _run_cmd_wait(cmd: str, log_path: str = None) -> int:
si.cb = win32process.STARTUPINFOA.__sizeof__() si.cb = win32process.STARTUPINFOA.__sizeof__()
# 输出重定向:sa 可继承 → 文件句柄随 CreateProcessA 复制给子进程;打开失败 # 输出重定向:sa 可继承 → 文件句柄随 CreateProcessA 复制给子进程;打开失败
# 则不设 STARTF_USESTDHANDLES,退回继承控制台(不伪造捕获,日志会明说)。 # 则不设 STARTF_USESTDHANDLES,退回继承控制台(不伪造捕获,日志会明说)。
log_fh: w32.win32base.HANDLE = w32.win32base.INVALID_HANDLE_VALUE # 初值用 NULL(None) 而非 INVALID_HANDLE_VALUE:后者是整数常量(-1),赋给指针
# 类型会触发"整数隐式转指针已禁止";仓库既有惯例是只与它做比较(下文 != 判断,
# 全仓 20+ 处同样写法)。NULL 与 INVALID 都不参与关闭,故关闭处需双重守卫。
log_fh: w32.win32base.HANDLE = None
if log_path is not None: if log_path is not None:
log_fh = w32.win32file.CreateFileA(log_path, w32.win32file.GENERIC_WRITE, log_fh = w32.win32file.CreateFileA(log_path, w32.win32file.GENERIC_WRITE,
w32.win32file.FILE_SHARE_READ, w32.win32file.FILE_SHARE_READ,
@@ -610,7 +613,8 @@ def _run_cmd_wait(cmd: str, log_path: str = None) -> int:
t.CPtr(0), t.CPtr(0), t.CPtr(c.Addr(si)), t.CPtr(c.Addr(pi))) t.CPtr(0), t.CPtr(0), t.CPtr(c.Addr(si)), t.CPtr(c.Addr(pi)))
stdlib.free(cmd_line) stdlib.free(cmd_line)
# 子进程已持有文件句柄副本,父侧立即关闭,避免句柄泄漏 # 子进程已持有文件句柄副本,父侧立即关闭,避免句柄泄漏
if log_fh != w32.win32base.INVALID_HANDLE_VALUE: # 双重守卫:NULL(未重定向) 与 INVALID(打开失败) 都不关闭
if log_fh is not None and log_fh != w32.win32base.INVALID_HANDLE_VALUE:
w32.win32base.CloseHandle(log_fh) w32.win32base.CloseHandle(log_fh)
if ok == 0: if ok == 0:
return -1 return -1