From 4b5a1b5787edee2a3b6cc10a3ccc5721f1414268 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 14 Oct 2021 13:16:07 +0000 Subject: lei: TSTP affects all curl and related subprocesses By relying more on pgroups for remaining remaining processes, this lets us pause all curl+tail subprocesses with a single kill(2) to avoid cluttering stderr. We won't bother pausing the pigz/gzip/bzip2/xz compressor process not cat-file processes, though, since those don't write to the terminal and they idle soon after the workers react to SIGSTOP. AutoReap is hoisted out from TestCommon.pm. CLONE_SKIP is gone since we won't be using Perl threads any time soon (they're discouraged by the maintainers of Perl). --- lib/PublicInbox/LeiRemote.pm | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'lib/PublicInbox/LeiRemote.pm') diff --git a/lib/PublicInbox/LeiRemote.pm b/lib/PublicInbox/LeiRemote.pm index 7782aa9d..54750062 100644 --- a/lib/PublicInbox/LeiRemote.pm +++ b/lib/PublicInbox/LeiRemote.pm @@ -9,10 +9,10 @@ package PublicInbox::LeiRemote; use v5.10.1; use strict; use IO::Uncompress::Gunzip; -use PublicInbox::OnDestroy; use PublicInbox::MboxReader; use PublicInbox::Spawn qw(popen_rd); use PublicInbox::LeiCurl; +use PublicInbox::AutoReap; use PublicInbox::ContentHash qw(git_sha); sub new { @@ -47,17 +47,14 @@ sub mset { $uri->query_form(q => $qstr, x => 'm', r => 1); # r=1: relevance my $cmd = $curl->for_uri($self->{lei}, $uri); $self->{lei}->qerr("# $cmd"); - my $rdr = { 2 => $lei->{2}, pgid => 0 }; - my ($fh, $pid) = popen_rd($cmd, undef, $rdr); - my $reap = PublicInbox::OnDestroy->new($lei->can('sigint_reap'), $pid); + my ($fh, $pid) = popen_rd($cmd, undef, { 2 => $lei->{2} }); + my $ar = PublicInbox::AutoReap->new($pid); $self->{smsg} = []; $fh = IO::Uncompress::Gunzip->new($fh, MultiStream => 1); PublicInbox::MboxReader->mboxrd($fh, \&_each_mboxrd_eml, $self); - my $err = waitpid($pid, 0) == $pid ? undef - : "BUG: waitpid($cmd): $!"; - @$reap = (); # cancel OnDestroy my $wait = $self->{lei}->{sto}->wq_do('done'); - die $err if $err; + $ar->join; + $lei->child_error($?) if $?; $self; # we are the mset (and $ibx, and $self) } -- cgit v1.2.3-24-ge0c7