Always use O_SHARE_DELETE with Unix.openfile #5435
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.
Follows-up #5351 (comment) with a better approach. The fds used for locking and for the output of running commands are now opened with
O_SHARE_DELETE
. This has no effect on Unix, but it makes the semantics of these files more POSIX-like on Windows. In particular, it means that a switch can be deleted while the lock is still held. This is both simpler than #5351 and also philosophically more accurate - it means that nothing can attempt to take a write lock until after the directory has been completely unlinked.It's possible that there are one or two other places - in particular, the file used when monitoring an external solver would be another candidate, but these are less critical. In particular, these two mean that cleaning up switches on error no longer displays a fault in opam and it also means that a "crashed" background process doesn't prevent a switch from being deleted.