From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 4160D1F463 for ; Sun, 15 Sep 2019 02:25:34 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH] qspawn: shorten lifetime of environ and opts args Date: Sun, 15 Sep 2019 02:25:34 +0000 Message-Id: <20190915022534.13509-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: We don't need to hold onto the subprocess environ and redirects/options for popen_rd after spawning the child process. I do not expect this to fix problem of leaking unlinked regular file descriptors (which I still can't reproduce), and it definitely does not fix the problem of leaking pipe descriptors (which I also can't reproduce). This will save an FD sooner on non-public-inbox-httpd servers which give a non-FD $env->{'psgi.input'}, however Regardless, it's good to free up memory resources in our own process ASAP we're done using them. --- lib/PublicInbox/Qspawn.pm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/PublicInbox/Qspawn.pm b/lib/PublicInbox/Qspawn.pm index 4b9bca5a..54976b00 100644 --- a/lib/PublicInbox/Qspawn.pm +++ b/lib/PublicInbox/Qspawn.pm @@ -56,6 +56,11 @@ sub _do_spawn { } ($self->{rpipe}, $self->{pid}) = popen_rd($cmd, $env, \%opts); + + # drop any IO handles opt was holding open via $opt->{hold} + # No need to hold onto the descriptor once the child process has it. + $self->{args} = $cmd; # keep this around for logging + if (defined $self->{pid}) { $limiter->{running}++; } else { @@ -104,7 +109,7 @@ sub waitpid_err ($$) { $self->{err} = $err; my $env = $self->{env} or return; if (!$env->{'qspawn.quiet'}) { - log_err($env, join(' ', @{$self->{args}->[0]}) . ": $err"); + log_err($env, join(' ', @{$self->{args}}) . ": $err"); } } -- EW