Make Windows' safe save more resilient #81001
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I was investigating failed last steps of safe save. After some tries to find out the specific issue with procmon and other tools, I could not find the exact reason for the many
ERROR_SHARING_VIOLATION
inReplaceFileW
.However, while searching for info on the matter, I found old and new implementations of file rename in LLVM:
The takeaway for me is that those implementations try way harder, like up to hundreds of times with very little rest between.
This PR does precisely that (try a lot) as well as remove the check for file existence, attempting right away the replace (also in the spirit of LLVM's implementations).
With this PR, all the previously failing cases work.