Set O_CLOEXEC by default when creating pipes to avoid race conditions...
Set O_CLOEXEC by default when creating pipes to avoid race conditions resulting from concurrent Subprocess creations Summary: [folly::Subprocess] Set O_CLOEXEC by default when creating pipes to avoid race conditions resulting from concurrent Subprocess creations If multiple threads are creating Subprocess objects concurrently, the write side file descriptor of the pipe created in the parent process might be inherited into other child processes unintentionally and never closed, causing the parent process to hang while reading from the read side of its pipe, thinking the other side must have been closed. The fix to the problem is to create the pipes and set O_CLOEXEC in a single pipe2 call. Then the child could clear the O_CLOEXEC flag selectively before calling exec(). Test Plan: Existing unit tests of Subprocess Added a new unit test which will hang in Subprocess constructor without this fix. Reviewed By: tudorb@fb.com FB internal diff: D1267396
Showing
Please register or sign in to comment