Close file descriptors of pipes after use #2591
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.
nix::unistd::pipe
returnsRawFd
s which have to be closed at some point, otherwise they are leaked. Wrapping them inFile
s does the trick.The leaked file descriptors can be observed by running
uucat /dev/null /dev/null /dev/null -
in one terminal (the-
ensures it doesn't exit immediately) and then runninglsof -p $(pidof uucat)
in another.It's possible to implement this without the
unsafe
keyword by writing a wrapper that callsnix::unistd::close
when it's dropped, but that function is technically also unsafe and probably will be marked as such in the future, so it's better to be upfront. See nix-rust/nix#1421.