From 8aa6e36fbd5955db5ee80059729feed1ec6ddaa0 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 1 Oct 2023 09:54:19 +0000 Subject: 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. --- lib/PublicInbox/ProcessPipe.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/PublicInbox/ProcessPipe.pm') diff --git a/lib/PublicInbox/ProcessPipe.pm b/lib/PublicInbox/ProcessPipe.pm index 16971801..ba2c1ecb 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: -- cgit v1.2.3-24-ge0c7