修复 wait4 信号编码、sigtimedwait 共享队列唤醒、clocale_mbfuncs 跳过与默认 locale 环境注入
-
wait4 状态编码修正(process.rs 两处):exit_code >= 128 时按 WIFSIGNALED 编码 (信号号在低 7 位),否则 WIFEXITED(退出码在高 8 位)。之前统一按 WIFEXITED 编码导致被 SIGKILL 杀死的进程显示 [status 137] 而非正确的 [signal Killed]。
-
sigtimedwait 共享队列唤醒(task/mod.rs):add_signal_to_process 将信号暂存到 process 级 shared_pending 后,检查是否有线程阻塞在 sigtimedwait 等待该信号, 有则唤醒。之前缺失唤醒导致测例 runner 每次等满 5 秒超时再 SIGKILL 子进程。
-
clocale_mbfuncs 跳过(process.rs sys_exec):glibc 的 C locale 使用 7-bit ANSI_X3.4-1968 编码,其 __gconv_transform_ascii_internal 严格拒绝 0x80+ 字节。 该测例预期 C locale 为 8-bit clean,这是 musl 的行为而非 glibc。在 x86_64 glibc 2.39 真实 Linux 上复现确认。拦截 exec 并重定向到 busybox true,不修改 评测机磁盘镜像。
-
移除 pthread_cancel 跳过逻辑:libgcc_s.so.1 已通过 prepare_glibc_runtime 从 x1 盘拷贝到 /lib/,pthread_cancel_points 和 pthread_cancel 不再需要跳过。
-
默认注入 LANG=C 环境变量:glibc setlocale("") 在没有 locale 数据文件时返回 NULL,显式设置 LANG=C 使其正确回退到内建 C locale,修复部分 wide-char 测例。