about summary refs log tree commit homepage
path: root/lib/PublicInbox/Gcf2Client.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/PublicInbox/Gcf2Client.pm')
-rw-r--r--lib/PublicInbox/Gcf2Client.pm16
1 files changed, 5 insertions, 11 deletions
diff --git a/lib/PublicInbox/Gcf2Client.pm b/lib/PublicInbox/Gcf2Client.pm
index 4bda5520..10820852 100644
--- a/lib/PublicInbox/Gcf2Client.pm
+++ b/lib/PublicInbox/Gcf2Client.pm
@@ -9,6 +9,7 @@ use PublicInbox::Git;
 use PublicInbox::Spawn qw(popen_rd);
 use IO::Handle ();
 use PublicInbox::Syscall qw(EPOLLONESHOT);
+use PublicInbox::DS qw(dwaitpid);
 # fields:
 #        async_cat => GitAsyncCat ref (read-only pipe)
 #        sock => writable pipe to Gcf2::loop
@@ -65,18 +66,11 @@ no warnings 'once';
 
 sub DESTROY {
         my ($self) = @_;
-        my $pid = delete $self->{pid};
         delete $self->{in};
-        return unless $pid;
-        eval {
-                PublicInbox::DS::dwaitpid($pid, undef, undef);
-                $self->close; # we're still in the event loop
-        };
-        if ($@) { # wait synchronously if not in event loop
-                my $sock = delete $self->{sock};
-                close $sock if $sock;
-                waitpid($pid, 0);
-        }
+        # GitAsyncCat::event_step may reap us with WNOHANG, too
+        my $pid = delete $self->{pid} or return;
+        PublicInbox::DS->in_loop ? $self->close : delete($self->{sock});
+        dwaitpid $pid;
 }
 
 # used by GitAsyncCat