#12341·t3code

防止工作空间所有权更改时恢复竞赛检查点文件

作者: juliusmarminge创建于 2026年9月18日更新于 2026年9月18日
标签bugacceptedvia-triage

检查点文件恢复隔离在命令接收和提供程序回滚之前再次进行检查。这些是观察结果,而不是原子工作区预留。现有的竞争依然存在:恢复 A 通过了最后一次检查;线程 B 然后在重叠的目录中注册/启动;A 还原了检出并可以覆盖 B 的文件。在 #12338 中修复父子关系所有权之前,这种情况也存在于相同的路径上。CheckpointService 的工作区互斥锁序列化了检查点操作,而线程创建和提供程序工作并没有获取它,因此仅将其键更改为规范路径并不能解决接收竞争。协调工作区所有权注册和文件系统恢复。涵盖线程创建、工作区/路径更改和提供程序 cwd 注册,包括规范别名和父子目录。新所有者在进行破坏性恢复时不得开始写入。避免在提供程序回滚或缓慢的 Git 工作期间保持 SQLite 事务或全局命令锁,这将阻止无关的线程并可能导致提供程序事件持久化死锁。

内容来源: pingdotgg/t3code