From 094a6b0812569672d6e24ca15ca73bca5def16cc Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 11 Aug 2022 22:33:12 +0100 Subject: [PATCH] prefork-interp: Except fd 2 from call_fds closing For the first run, stderr is the inherited fd Signed-off-by: Ian Jackson --- perl/Prefork.pm | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/perl/Prefork.pm b/perl/Prefork.pm index 3eb9a27..4fbc2b5 100644 --- a/perl/Prefork.pm +++ b/perl/Prefork.pm @@ -36,8 +36,7 @@ sub become_monitor () { open ::STDIN , "<& $call_fds[0]" or fail_log("dup for fd0"); open ::STDOUT, ">& $call_fds[1]" or fail_log("dup for fd1"); open ::STDERR, ">& $call_fds[2]" or fail_log("dup for fd2"); - POSIX::close($_) foreach @call_fds; - close CALL; + close_call_fds(); return; } @@ -49,6 +48,14 @@ sub become_monitor () { _exit(0); } +sub close_call_fds () { + foreach (@call_fds) { + next if $_ <= 2; + POSIX::close($_); + } + close CALL; +} + sub protocol_write ($) { my ($d) = @_; return if (print CALL $d and flush CALL); @@ -160,8 +167,7 @@ sub initialisation_complete { open STDERR, ">&NULL" or fail_log("dup null onto stderr: $!"); close NULL; - POSIX::close($_) foreach @call_fds; - close CALL; + close_call_fds(); my $flags = fcntl(LISTEN, F_GETFL, 0) or fail_log("F_GETFL listen socket: $!"); -- 2.30.2