diff options
Diffstat (limited to 'lib/PublicInbox/Gcf2Client.pm')
-rw-r--r-- | lib/PublicInbox/Gcf2Client.pm | 16 |
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 |