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.
Previously to spawn a process with a closed standard handle, we
would use
posix_spawn_file_action_addclose
. However, it turns out thatPOSIX specifies that
spawnp()
may fail ifaddclose()
is used on anfd that is already closed. While glibc and musl appear to ignore this
aspect of the specification, Darwin indeed follows it leading to #251.
This behavior is rather unfortunate as
posix_spawn_file_action_addclose
is a convenient way to close a handlein a subprocess in a race-free manner (e.g. unlike
O_CLOEXEC
, which isglobal). To avoid #251 we must first use
posix_spawn_file_action_addopen
on the fd (e.g. opening/dev/null
)to be closed to ensure that it is valid, which has the side-effect of
closing the inherited fd. We can then safely use
posix_spawn_file_action_addclose
to close the fd.Fixes #251.