X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FLeiXSearch.pm;h=3ec755280dc995250a1a4dac6d545b432748fbda;hb=ea11b7b17d525d20a07d7f62c0334501c5a721b4;hp=ee9216feeb238591cd38774e0449605fac9fcbb9;hpb=96b0a14be7e62742ad06f0a37c3cba61fe6c51e7;p=public-inbox.git diff --git a/lib/PublicInbox/LeiXSearch.pm b/lib/PublicInbox/LeiXSearch.pm index ee9216fe..3ec75528 100644 --- a/lib/PublicInbox/LeiXSearch.pm +++ b/lib/PublicInbox/LeiXSearch.pm @@ -15,6 +15,7 @@ use PublicInbox::Search qw(xap_terms); use PublicInbox::Spawn qw(popen_rd spawn which); use PublicInbox::MID qw(mids); use PublicInbox::Smsg; +use PublicInbox::AutoReap; use PublicInbox::Eml; use PublicInbox::LEI; use Fcntl qw(SEEK_SET F_SETFL O_APPEND O_RDWR); @@ -281,11 +282,9 @@ sub each_remote_eml { # callback for MboxReader->mboxrd my $xoids = $lei->{ale}->xoids_for($eml, 1); my $smsg = bless {}, 'PublicInbox::Smsg'; if ($self->{import_sto} && !$xoids) { - my $res = $self->{import_sto}->wq_do('add_eml', $eml); - if (ref($res) eq ref($smsg)) { # totally new message - $smsg = $res; - $smsg->{kw} = []; # short-circuit xsmsg_vmd - } + my ($res, $kw) = $self->{import_sto}->wq_do('add_eml', $eml); + $smsg = $res if ref($res) eq ref($smsg); # totally new message + $smsg->{kw} = $kw; # short-circuit xsmsg_vmd } $smsg->{blob} //= $xoids ? (keys(%$xoids))[0] : $lei->git_oid($eml)->hexdigest; @@ -346,18 +345,17 @@ sub query_remote_mboxrd { my @qform = (x => 'm'); push(@qform, t => 1) if $opt->{threads}; my $verbose = $opt->{verbose}; - my ($reap_tail, $reap_curl); + my $reap_tail; my $cerr = File::Temp->new(TEMPLATE => 'curl.err-XXXX', TMPDIR => 1); fcntl($cerr, F_SETFL, O_APPEND|O_RDWR) or warn "set O_APPEND: $!"; - my $rdr = { 2 => $cerr, pgid => 0 }; - my $sigint_reap = $lei->can('sigint_reap'); + my $rdr = { 2 => $cerr }; if ($verbose) { # spawn a process to force line-buffering, otherwise curl # will write 1 character at-a-time and parallel outputs # mmmaaayyy llloookkk llliiikkkeee ttthhhiiisss - my $o = { 1 => $lei->{2}, 2 => $lei->{2}, pgid => 0 }; + my $o = { 1 => $lei->{2}, 2 => $lei->{2} }; my $pid = spawn(['tail', '-f', $cerr->filename], undef, $o); - $reap_tail = PublicInbox::OnDestroy->new($sigint_reap, $pid); + $reap_tail = PublicInbox::AutoReap->new($pid); } my $curl = PublicInbox::LeiCurl->new($lei, $self->{curl}) or return; push @$curl, '-s', '-d', ''; @@ -372,16 +370,13 @@ sub query_remote_mboxrd { my $cmd = $curl->for_uri($lei, $uri); $lei->qerr("# $cmd"); my ($fh, $pid) = popen_rd($cmd, undef, $rdr); - $reap_curl = PublicInbox::OnDestroy->new($sigint_reap, $pid); + my $reap_curl = PublicInbox::AutoReap->new($pid); $fh = IO::Uncompress::Gunzip->new($fh, MultiStream => 1); PublicInbox::MboxReader->mboxrd($fh, \&each_remote_eml, $self, $lei, $each_smsg); - my $err = waitpid($pid, 0) == $pid ? undef - : "BUG: waitpid($cmd): $!"; - @$reap_curl = (); # cancel OnDestroy - die $err if $err; my $nr = $lei->{-nr_remote_eml}; my $wait = $lei->{sto}->wq_do('done') if $nr && $lei->{sto}; + $reap_curl->join; if ($? == 0) { # don't update if no results, maybe MTA is down $key && $nr and @@ -389,7 +384,7 @@ sub query_remote_mboxrd { mset_progress($lei, $lei->{-current_url}, $nr, $nr); next; } - $err = ''; + my $err; if (-s $cerr) { seek($cerr, 0, SEEK_SET) // warn "seek($cmd stderr): $!"; @@ -397,6 +392,7 @@ sub query_remote_mboxrd { warn "read($cmd stderr): $!"; truncate($cerr, 0) // warn "truncate($cmd stderr): $!"; } + $err //= ''; next if (($? >> 8) == 22 && $err =~ /\b404\b/); $uri->query_form(q => $qstr); $lei->child_error($?, "E: <$uri> $err"); @@ -469,7 +465,7 @@ sub do_post_augment { $err = $@; if ($err) { if (my $lxs = delete $lei->{lxs}) { - $lxs->wq_kill; + $lxs->wq_kill('-TERM'); $lxs->wq_close(0, undef, $lei); } $lei->fail("$err");