Windows 原子文件发布
headless 文档保存会在目标目录准备并刷盘一个独占的暂存文件,然后通过原子替换发布完整字节
在 Windows 上,对瞬态的 ERROR_ACCESS_DENIED、ERROR_SHARING_VIOLATION 和 ERROR_LOCK_VIOLATION 失败,最多允许八次带 MOVEFILE_REPLACE_EXISTING 和 MOVEFILE_WRITE_THROUGH 的 MoveFileEx 尝试
各次尝试之间的等待为 1、2、4、8、16、16 和 16 毫秒,请求的等待总计最多 63 毫秒;实际耗时由操作系统调度和 syscall 时长决定
每次尝试之前以及每次等待前后都会检查取消;一次成功完成的原子替换即为发布边界
永久锁定或访问限制会保留原始目标文件并报告最后捕获的 Windows 错误;其他操作系统错误立即失败
失败的文档保存会清理自己持有的暂存文件;发布过程不会删除既有目标文件,也不会回退为部分拷贝
普通保存、签名 PDF 和独立文档时间戳都走同一私有路径发布;Linux 继续使用其 fsync 与 rename 路径
实际验收
测试会持有真实拒绝删除的 Windows 文件句柄,在另一个线程上释放瞬态锁,保持永久锁,在重试期间取消,并尝试只读替换
每个 Windows 目标还执行 500 次完整原子替换和 50 次带原生重新加载的真实文档保存,保持源字节不变并检查暂存文件清理
一个仅用 WinAPI 的独立探针在不涉及 HotPDF 或 Cairo 的情况下复现最初的间歇性 access-denied 失败;借此确认发布边界,而不会把原因归咎于未被观测的进程