Fix null file descriptor being closed when used as redirection for standard fd of child processes #957
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.
So, this is my mess-up, probably because I ignored the error, and because my tests weren't comprehensive enough.
In my eagerness of cloexec-ing file descriptors, I added one too many
O_CLOEXEC
flag. When one wants to redirect a standard file descriptor of a child process (giving`Dev_null
to~stdin
,~stdout
, or~stderr
arguments of functions inLwt_process
, my code introduced in 9de01c9 will actually close the file descriptor for the child process, which means that any read/write to this standard fd will fail. It is likely that the child process will exit with an error, the opposite of the intent, of course.I've improved the tests, fixed the bug, simplified a bit the code and used explicit close-on-exec or keep-on-exec everywhere.