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(-)

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:

Reply via email to