diff options
Diffstat (limited to 'src/subprocess-posix.cc')
-rw-r--r-- | src/subprocess-posix.cc | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/subprocess-posix.cc b/src/subprocess-posix.cc index 5ffe85b..1de22c3 100644 --- a/src/subprocess-posix.cc +++ b/src/subprocess-posix.cc @@ -73,8 +73,6 @@ bool Subprocess::Start(SubprocessSet* set, const string& command) { // default action in the new process image, so no explicit // POSIX_SPAWN_SETSIGDEF parameter is needed. - // TODO: Consider using POSIX_SPAWN_USEVFORK on Linux with glibc? - if (!use_console_) { // Put the child in its own process group, so ctrl-c won't reach it. flags |= POSIX_SPAWN_SETPGROUP; @@ -90,9 +88,14 @@ bool Subprocess::Start(SubprocessSet* set, const string& command) { Fatal("posix_spawn_file_actions_adddup2: %s", strerror(errno)); if (posix_spawn_file_actions_adddup2(&action, output_pipe[1], 2) != 0) Fatal("posix_spawn_file_actions_adddup2: %s", strerror(errno)); + if (posix_spawn_file_actions_addclose(&action, output_pipe[1]) != 0) + Fatal("posix_spawn_file_actions_addclose: %s", strerror(errno)); // In the console case, output_pipe is still inherited by the child and // closed when the subprocess finishes, which then notifies ninja. } +#ifdef POSIX_SPAWN_USEVFORK + flags |= POSIX_SPAWN_USEVFORK; +#endif if (posix_spawnattr_setflags(&attr, flags) != 0) Fatal("posix_spawnattr_setflags: %s", strerror(errno)); |