Avoid race condition crash on directory deletion #281
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.
Given the directory structure /a/b/c.txt there is a race condition
in DirectorySnapshot if it reads the list of entries in /a, then
/a/b is deleted, and then it tries to read /a/b. This happens
often in practice when changing between very different branches in
git.
The correct behaviour would be to report /a/b as not existing in this
case, but we cannot do this without either changing the order of the
walk (from parent-first to parent-last) or significantly increasing
memory usage and copies, so instead we report /a/b as existing but
empty, which is not ideal, but is better than the current behavior
of silently crashing.