TSCBasic: fix race condition causing close errors #456
+16
−14
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.
When compiling SwiftPM (via
swift-bootstrap
), I was very consistently getting a "close error" that would break the compile.This appears to be a race condition as it only happens with overlapping
popen
calls, likely from the subprocess in the 2ndpopen
call inheriting all the pipe file descriptors from the previouspopen
call.What seemed to fix it for me is instead of manually closing all pipes in the subprocess, we instead set
O_CLOEXEC
on the pipe - this will apply to all subprocesses so concurrentpopen
calls are no longer a concern.It appears this issue may have popped up before but wasn't tracked down fully: #143 (indeed stdin seemed to be the one that would always error for me), #439 and friends.
Likely fixes #344.
This issue also affects both release branches, so could also be cherry picked there (I tested 5.9 and it fixes the issue there).