diff options
author | David Goulet <dgoulet@torproject.org> | 2024-12-03 10:16:26 -0500 |
---|---|---|
committer | David Goulet <dgoulet@torproject.org> | 2024-12-03 10:16:32 -0500 |
commit | 717b59ac2be260b1ed7db0db32ca9b99dad6ff87 (patch) | |
tree | b1b6ee5a0a09a5ef881a976bbe960fdfb846448f | |
parent | e5b51eb10f6802ea4cff9fab6d0b91e905630d15 (diff) | |
download | tor-717b59ac2be260b1ed7db0db32ca9b99dad6ff87.tar.gz tor-717b59ac2be260b1ed7db0db32ca9b99dad6ff87.zip |
process: Don't close all FDs on new spawn
Fixes #40990
Signed-off-by: David Goulet <dgoulet@torproject.org>
-rw-r--r-- | changes/ticket40990 | 4 | ||||
-rw-r--r-- | src/lib/process/process_unix.c | 10 |
2 files changed, 8 insertions, 6 deletions
diff --git a/changes/ticket40990 b/changes/ticket40990 new file mode 100644 index 0000000000..af613088d8 --- /dev/null +++ b/changes/ticket40990 @@ -0,0 +1,4 @@ + o Minor bugfix (process): + - Avoid closing all possible FDs when spawning a process (PT). On some systems, this could + lead to 3+ minutes hang. Fixes bug 40990; bugfix on 0.3.5.1-alpha. + diff --git a/src/lib/process/process_unix.c b/src/lib/process/process_unix.c index 15ae03eadf..932cdf2e8c 100644 --- a/src/lib/process/process_unix.c +++ b/src/lib/process/process_unix.c @@ -137,7 +137,7 @@ process_unix_exec(process_t *process) int stdin_pipe[2]; int stdout_pipe[2]; int stderr_pipe[2]; - int retval, fd; + int retval; unix_process = process_get_unix_process(process); @@ -240,11 +240,9 @@ process_unix_exec(process_t *process) close(stdin_pipe[0]); close(stdin_pipe[1]); - /* Close all other fds, including the read end of the pipe. XXX: We should - * now be doing enough FD_CLOEXEC setting to make this needless. - */ - for (fd = STDERR_FILENO + 1; fd < max_fd; fd++) - close(fd); + /* Note that we don't close all FDs from here, which we used to do, because + * all our open are CLOEXEC. With a very large maximum number of FDs, the + * loop was taking a long time: #40990 */ /* Create the argv value for our new process. */ char **argv = process_get_argv(process); |