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:
1 parent
785741026f
commit
82f16127c0
1 file changed
+6
-2
@@ -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
|
||||||
|
|||||||
Reference in new issue
Block a user