fix(phase2): llc 线程数组元素类型改为指针 Thread|t.CPtr
list[vthreading.Thread] 的 store/load 类型不一致:append 存 8 字节 (th 指针,elem_ptr 降级 i8*),get 却按 Thread 结构体返回槽地址 (HandlesExprAttr._infer_element_struct_class 推断元素类)→ th_j 是 list 数据槽地址,join 把对象地址当线程句柄 → WaitForSingleObject 立即 WAIT_FAILED → alive=0 → 误报 llc 失败(4bd254a 只修了槽间距, 未修类型不一致)。改为 list[vthreading.Thread | t.CPtr](与已稳定的 list[ast.AST | t.CPtr] 同理),store/load 均为 8 字节指针, join/is_alive/close 拿到真实线程句柄。
This commit is contained in:
1 parent
3f3e3d5898
commit
645e8e0fbf
1 file changed
+6
-3
@@ -609,9 +609,12 @@ def run_llc_parallel(tasks: bytes, task_count: int, max_threads: int) -> int:
|
||||
# 注意:list[T](pool, N) 第二参数是 elem_size(元素大小)不是容量!
|
||||
# 此前传 max_threads=16 → 槽间距 16 字节 < Thread 结构体大小,set 时
|
||||
# 元素重叠覆盖(get 返回混合垃圾),且初始容量仅 8,set(8..15) 越界写
|
||||
# 破坏堆 → llc 成功后随机 ACCESS_VIOLATION。改为不传 elem_size(默认
|
||||
# T.__sizeof__())+ append 自动扩容(初始 8 → 16 → 32,覆盖最大批量)。
|
||||
th_list: list[vthreading.Thread] | t.CPtr = list[vthreading.Thread](_mbuddy)
|
||||
# 破坏堆 → llc 成功后随机 ACCESS_VIOLATION。
|
||||
# 且元素类型必须用 Thread | t.CPtr(指针):list[vthreading.Thread]
|
||||
# 的 append 存 8 字节(th 指针)但 get 按 Thread 结构体返回槽地址 →
|
||||
# join 把对象地址当句柄 → WAIT_FAILED 立即返回 alive=0(误报失败)。
|
||||
# list[Thread | t.CPtr] 与 list[ast.AST | t.CPtr] 同理,store/load 一致。
|
||||
th_list: list[vthreading.Thread | t.CPtr] | t.CPtr = list[vthreading.Thread | t.CPtr](_mbuddy)
|
||||
if th_list is None:
|
||||
VLogger.error("run_llc_parallel: 线程数组分配失败", "PhaseB")
|
||||
return 1
|
||||
|
||||
Reference in new issue
Block a user