mirror of
https://github.com/reactos/ninja.git
synced 2025-02-17 01:58:03 +00:00
don't leak fds into subprocesses
Patch from Antoine Labour <piman@chromium.org>, (hacky) test by me.
This commit is contained in:
parent
a621299093
commit
bb52198d19
23
misc/inherited-fds.ninja
Normal file
23
misc/inherited-fds.ninja
Normal 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
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user