use closefrom(2) on platforms supports it to reduce race condition window #8201
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.
Use
closefrom(2)instead ofclose(2)in a loop to reduce the window of race condition with other part of the process cloud be polling/processing the file descriptors.Motivation:
Currently, a loop is used to close all possible file descriptors prior to
execve(2)being called. This has the side effect that file descriptors owned by different components of the same process is being closed unexpectedly, which cause issue #8197.Use
closefrom(2)instead ofclosein a loop to significantly reduce the window between closing the file descriptors and callingexecve(2), to minimize the impact.In #8197, linking a debug build of
libdispatchcan randomly crashswift-run, due to dispatch catching that the file descriptors it works on no longer being valid, which causes an assertion and crash the process.Modifications:
Use
closefrom(2)instead ofclose(2)in a loop on platforms supports it.Result:
Reduce the probability
swift-runcrash due to race conditions.