mirror of
https://github.com/Yuyi-Oak/BlueArchiveToolkit.git
synced 2026-07-22 01:15:14 +08:00
启动 curl 子进程时命中的 ETXTBSY(可执行文件忙)是多线程程序里 fork/exec 与"刚写出的可执行文件"之间的瞬时竞态:另一线程 fork 出的 子进程在 fork 与 execve 之间短暂持有目标文件的可写句柄,导致本次 exec 被内核判为忙。此前它被并入 ProcessFailed 且 retryable=false, per-URL 层直接放弃。 新增 CurlFailureKind::ProcessBusy(retryable=true),在 process_failed 中按 io::ErrorKind::ExecutableFileBusy 精确识别,并在 busy 重试前做 极短退避让兄弟进程完成 execve。生产中 curl 是固定系统二进制、从不 被并发改写,故此变更对真实下载无影响,仅消除集成测试在高并发下偶发的 "Text file busy" flake(fetch_bootstrap unwrap 失败)。 验证:以 8-10 并发 worker × 8 线程 / 4 核(≈64-80 线程超载)复现, 修复前首轮即挂;修复后 200+ 次超压运行零 ETXTBSY、零失败。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>