Windows のアトミックファイル公開
ヘッドレスドキュメント保存では、アトミック置換で完全なバイト列を公開する前に、宛先ディレクトリに排他的なステージングファイルを準備してフラッシュします
Windows では、一時的な ERROR_ACCESS_DENIED、ERROR_SHARING_VIOLATION、ERROR_LOCK_VIOLATION の失敗に対し、MOVEFILE_REPLACE_EXISTING と MOVEFILE_WRITE_THROUGH 付きの MoveFileEx を最大 8 回試行できます
試行間の待機は 1、2、4、8、16、16、16 ミリ秒で、要求される待機は合計最大 63 ミリ秒です。実際の経過時間は OS のスケジューリングとシステムコールの所要時間で決まります
キャンセルは各試行の前と各待機の前後で観測されます。完了したアトミック置換の成功が公開境界です
永続的なロックやアクセス制限では、元の宛先が保持され、最後に捕捉した Windows エラーが報告されます。その他の OS エラーは即座に失敗します
失敗したドキュメント保存は所有するステージングファイルをクリーンアップします。公開は既存の宛先を削除せず、部分コピーへフォールバックもしません
同じプライベートパスが、通常の保存、署名済み PDF、スタンドアロンのドキュメントタイムスタンプを公開します。Linux は引き続き fsync と rename のパスを使います
実際の受け入れテスト
テストは、実際の Windows の削除拒否ファイルハンドルの保持、別スレッドでの一時ロックの解放、永続ロックの保持、リトライ中のキャンセル、読み取り専用置換の試行を行います
各 Windows ターゲットはさらに、500 回の完全なアトミック置換と、ネイティブ再ロード付きの 50 回の実際のドキュメント保存を行い、ソースバイトの保持とステージングファイルのクリーンアップを確認します
独立した WinAPI 専用プローブが、HotPDF や Cairo なしで元の断続的なアクセス拒否失敗を再現します。これにより、観測されていないプロセスに原因を帰属させずに公開境界を特定します