From ff91a3b8ba82d1d39dfd6b6ba18ba3134133693b Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 31 Dec 2020 13:51:45 +0000 Subject: gcf2client: reap process on DESTROY We don't want to leave Xapcmd waitpid(-1, ...) call to hit it. --- lib/PublicInbox/Gcf2Client.pm | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'lib/PublicInbox/Gcf2Client.pm') diff --git a/lib/PublicInbox/Gcf2Client.pm b/lib/PublicInbox/Gcf2Client.pm index ab486de5..4bda5520 100644 --- a/lib/PublicInbox/Gcf2Client.pm +++ b/lib/PublicInbox/Gcf2Client.pm @@ -12,8 +12,8 @@ use PublicInbox::Syscall qw(EPOLLONESHOT); # fields: # async_cat => GitAsyncCat ref (read-only pipe) # sock => writable pipe to Gcf2::loop - - +# in => pipe we read from +# pid => PID of Gcf2::loop process sub new { my ($rdr) = @_; my $self = bless {}, __PACKAGE__; @@ -63,6 +63,22 @@ sub event_step { 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); + } +} + # used by GitAsyncCat *cat_async_step = \&PublicInbox::Git::cat_async_step; -- cgit v1.2.3-24-ge0c7