From: Eric Wong Date: Sun, 1 Oct 2023 09:54:19 +0000 (+0000) Subject: process_pipe: don't run `close' unless requested X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8aa6e36fbd5955db5ee80059729feed1ec6ddaa0;p=thirdparty%2Fpublic-inbox.git process_pipe: don't run `close' unless requested If a user is relying on reference counts to invalidate FDs (as we do in many places), rely on them instead of explicit `close'. This forces us to do a better job of managing refs and avoiding redundant fields which make our code more fragile. --- diff --git a/lib/PublicInbox/ProcessPipe.pm b/lib/PublicInbox/ProcessPipe.pm index 169718019..ba2c1ecb9 100644 --- a/lib/PublicInbox/ProcessPipe.pm +++ b/lib/PublicInbox/ProcessPipe.pm @@ -58,7 +58,7 @@ sub FILENO { fileno($_[0]->{fh}) } sub _close ($;$) { my ($self, $wait) = @_; my ($fh, $pid) = delete(@$self{qw(fh pid)}); - my $ret = defined($fh) ? close($fh) : ''; + my $ret = (defined($fh) && $wait) ? close($fh) : ($fh = ''); return $ret unless defined($pid) && $self->{ppid} == $$; if ($wait) { # caller cares about the exit status: # synchronous wait via defined(wantarray) on awaitpid: