[🍒 stable/20230725] Handle new delete_pending
error code when stating index unit files
#8848
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.
Explanation: Fixes a common compiler crash on Windows when generating the index while building.
Scope: This crash happens frequently when building large projects on Windows when indexing while building. The
delete_pending
error code is only generated on Windows when thestatus
function is called against a path that has been marked for deletion.Issue: This issue tracked the addition of the new error code, which was done in support of the fix here: llvm#89137
Risk: Very low risk, this change introduces handling for a new error code that can only be generated under specific conditions on Windows.
Testing: Tested through LLVM CI and locally.
Reviewer: @compnerd
Multiple clang processes race to write out the same index file via renaming a newly generated index file ontop of the stale one. On Windows, there is a small window where the destination path is marked for deletion, and querying the file at this time would return a misleading
permission_denied
error (which is the Win32 error mapping from the underlying NTSTATUS codeSTATUS_DELETE_PENDING
). An upstream change has modified thefs::status
function on Windows to detect this case and return a more accuratedelete_pending
error code, which can be handled here as if the file is already deleted (i.e.no_such_file_or_directory
)(cherry picked from commit dd2cc94)