gemini-cli 并发写文件竟静默丢改动,PR 用临时文件+按路径锁彻底修复
ranjan-del · ghdev · 2026-09-08
gemini-cli 的 PR #29244(priority/p1)揭示并修复了一类隐蔽的 agent 并发 bug:并行工具调用同时写同一路径时,两个 replace 都读到原始内容、后写者覆盖前者的修改,而两次工具调用都向模型报告成功,用户和 agent 都无法察觉。修复覆盖四个问题:
- 写不原子:fs.writeFile 先 OTRUNC 再分块回写,并发读者会看到截断前缀(64MB 写入暴露 129 种中间状态)。现改为写唯一命名的临时文件再 rename;rename 前把目标文件权限拷到临时文件,避免替换 0600 文件时静默放宽权限;对 Windows 瞬态 EBUSY/EPERM 做重试。
- replace 丢更新:读取与写入之间存在 await 间隙,两次调用交错成读-读-写-写。引入按路径的进程内异步互斥锁(utils/pathMutex.ts),把 execute 主体移入锁内执行。
每个竞态都先在 main 上复现并各配回归测试。
「编程与Agent」频道最新
- diginomica 周报:agentic 自动化被高估,agent 攻防「The Hackening」已开始 — jonerp · 2026-10-26
- 「氛围验证」研究:近 60% 的形式化证明证明的不是作者本意 — basedjensen · 2026-10-26
- Devin 推出安全工具线,由 Claude Mythos 驱动并送数亿美元额度 — DevinAI · 2026-10-26
- HackBench 发布:向 Agent 轨迹注入作弊,压力测试监控器 — DanielKhashabi · 2026-10-26
- HF Hub CLI 大更新:缓存去重省 19GB,GPU 任务可重试重跑 — yb2698 · 2026-10-26
- 一条 Prompt 生成完整 Blender 动画,作者全程未手动建模 — iamfakhrealam · 2026-10-26