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: