don't leak fds into subprocesses

Patch from Antoine Labour <piman@chromium.org>, (hacky) test by me.
This commit is contained in:
Evan Martin 2011-10-31 15:39:03 -07:00
parent a621299093
commit bb52198d19
2 changed files with 24 additions and 0 deletions

23
misc/inherited-fds.ninja Normal file
View File

@ -0,0 +1,23 @@
# This build file prints out a list of open file descriptors in
# Ninja subprocesses, to help verify we don't accidentally leak
# any.
# Because one fd leak was in the code managing multiple subprocesses,
# this test brings up multiple subprocesses and then dumps the fd
# table of the last one.
# Use like: ./ninja -f misc/inherited-fds.ninja
rule sleep
command = sleep 10000
rule dump
command = sleep 1; ls -l /proc/self/fd; exit 1
build all: phony a b c d e
build a: sleep
build b: sleep
build c: sleep
build d: sleep
build e: dump

View File

@ -42,6 +42,7 @@ bool Subprocess::Start(SubprocessSet* set, const string& command) {
if (pipe(output_pipe) < 0)
Fatal("pipe: %s", strerror(errno));
fd_ = output_pipe[0];
SetCloseOnExec(fd_);
pid_ = fork();
if (pid_ < 0)