Publicação atômica de arquivos no Windows

O saving de documentos headless prepara e faz flush de um arquivo de staging exclusivo no diretório de destino antes de publicar seus bytes completos através de substituição atômica

No Windows, falhas transitórias de ERROR_ACCESS_DENIED, ERROR_SHARING_VIOLATION e ERROR_LOCK_VIOLATION permitem no máximo oito tentativas de MoveFileEx com MOVEFILE_REPLACE_EXISTING e MOVEFILE_WRITE_THROUGH

As esperas entre tentativas são de 1, 2, 4, 8, 16, 16 e 16 milissegundos, totalizando no máximo 63 milissegundos de esperas solicitadas; o scheduling do sistema operacional e a duração das syscalls determinam o tempo real decorrido

O cancelamento é observado antes de cada tentativa e antes e depois de cada espera; uma substituição atômica bem-sucedida e completa é a fronteira de publicação

Travamentos permanentes ou restrições de acesso preservam o destino original e reportam o último erro Windows capturado; os demais erros do sistema operacional falham imediatamente

Saves de documentos com falha limpam seus arquivos de staging próprios; a publicação não apaga um destino existente nem cai para uma cópia parcial

O mesmo caminho privado publica saves comuns, PDFs assinados e document timestamps independentes; o Linux continua usando seu caminho de fsync e rename

Aceitação real

Os testes seguram handles reais de arquivos do Windows que negam deleção, liberam um lock transitório em outra thread, retêm locks permanentes, cancelam durante o retry e tentam substituição read-only

Cada alvo Windows também executa 500 substituições atômicas completas e 50 saves reais de documentos com reload nativo, preservando os bytes da origem e checando a limpeza dos arquivos de staging

Uma sonda separada somente WinAPI reproduz a falha original intermitente de access denied sem HotPDF nem Cairo; isso identifica a fronteira de publicação sem atribuir a causa a um processo não observado

SaveToFile · Workflows de assinatura