Commit 32a7a3e
authored
fix(provider): 构建期发心跳,避免冷机首次被 d2x 活性超时误杀 (#88)
有反馈说 d2x checker 在 Windows 10 上会卡住。除了已修的 cmd.exe 重定向,还有
一条与平台无关、冷机才撞得到的:
mcpp test --message-format json 在整个构建期一个字节都不产出。
这是实测结论,不是推断 —— 带不带 -q 都一样:stdout 只有末尾那两行 JSON,
stderr 全空(机器可读模式把人读输出整个收编进 JSON 了)。所以从 d2x 的视角看,
Provider 从 stage("compile") 之后就彻底沉默,直到构建结束。
冷机第一次要在这段沉默里备工具链与 std 模块。一旦超过 d2x 的活性超时
(provider_idle_timeout,默认 120s),正常构建会被当成挂死而终止;更糟的是学习者
改一次文件就重试一次、每次都在同一处被杀,表现为「怎么改都过不去」——
与「卡住」难以区分。
做法:capture_stdout 把读取交给工作线程(fgets 是阻塞的,单线程在沉默期根本回
不到我们手里),主线程每 20s 发一条 output 事件。一举两得:持续喂活 d2x 的计时
器,并让学习者看见首次构建正在进行,而不是对着黑屏干等。
比单纯调大 120s 阈值更对症 —— 阈值调多大都是猜,心跳把「有进展」变成可观测
事实。runner 保持协议无关:回调由 main.cpp 注入,发射逻辑不下沉。
验证:
- 心跳会发 —— 临时把间隔设为 0 跑一次,确认 output 事件出现(改回 20s 后
热构建 0 条,不打扰正常路径)
- 无回归 —— d2x/buildtools/tests/e2e.sh zh:协议冒烟 52 练习 ✓ /
pristine 全部保持未通过 ✓ / 52/52 参考答案全部通过 ✓1 parent f14391a commit 32a7a3e
2 files changed
Lines changed: 54 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
87 | 87 | | |
88 | 88 | | |
89 | 89 | | |
90 | | - | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
91 | 100 | | |
92 | 101 | | |
93 | 102 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
34 | | - | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
35 | 51 | | |
36 | 52 | | |
37 | 53 | | |
| |||
52 | 68 | | |
53 | 69 | | |
54 | 70 | | |
55 | | - | |
56 | | - | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
57 | 95 | | |
58 | 96 | | |
59 | 97 | | |
| |||
130 | 168 | | |
131 | 169 | | |
132 | 170 | | |
133 | | - | |
| 171 | + | |
| 172 | + | |
134 | 173 | | |
135 | 174 | | |
136 | 175 | | |
| |||
142 | 181 | | |
143 | 182 | | |
144 | 183 | | |
145 | | - | |
| 184 | + | |
146 | 185 | | |
147 | 186 | | |
148 | 187 | | |
| |||
0 commit comments