diff options
Diffstat (limited to 'lib/PublicInbox/LeiUp.pm')
-rw-r--r-- | lib/PublicInbox/LeiUp.pm | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/lib/PublicInbox/LeiUp.pm b/lib/PublicInbox/LeiUp.pm index b8a98360..9931f017 100644 --- a/lib/PublicInbox/LeiUp.pm +++ b/lib/PublicInbox/LeiUp.pm @@ -1,16 +1,16 @@ -# Copyright (C) 2021 all contributors <meta@public-inbox.org> +# Copyright (C) all contributors <meta@public-inbox.org> # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt> # "lei up" - updates the result of "lei q --save" package PublicInbox::LeiUp; -use strict; -use v5.10.1; +use v5.12; # n.b. we use LeiInput to setup IMAP auth use parent qw(PublicInbox::IPC PublicInbox::LeiInput); -use PublicInbox::LeiSavedSearch; +use PublicInbox::LeiSavedSearch; # OverIdx use PublicInbox::DS; use PublicInbox::PktOp; use PublicInbox::LeiFinmsg; +use PublicInbox::LEI; my $REMOTE_RE = qr!\A(?:imap|http)s?://!i; # http(s) will be for JMAP sub up1 ($$) { @@ -32,8 +32,10 @@ sub up1 ($$) { my $rawstr = $lss->{-cfg}->{'lei.internal.rawstr'} // (scalar(@$q) == 1 && substr($q->[0], -1) eq "\n"); if ($rawstr) { - scalar(@$q) > 1 and - die "$f: lei.q has multiple values (@$q) (out=$out)\n"; + die <<EOM if scalar(@$q) > 1; +$f: lei.q has multiple values (@$q) (out=$out) +$f: while lei.internal.rawstr is set +EOM $lse->query_approxidate($lse->git, $mset_opt->{qstr} = $q->[0]); } else { $mset_opt->{qstr} = $lse->query_argv_to_string($lse->git, $q); @@ -75,6 +77,7 @@ sub redispatch_all ($$) { my $upq = [ (@{$self->{o_local} // []}, @{$self->{o_remote} // []}) ]; return up1($lei, $upq->[0]) if @$upq == 1; # just one, may start MUA + PublicInbox::OverIdx::fork_ok($lei->{opt}); # FIXME: this is also used per-query, see lei->_start_query my $j = $lei->{opt}->{jobs} || do { my $n = $self->detect_nproc // 1; @@ -89,7 +92,6 @@ sub redispatch_all ($$) { $op_c->{ops} = { '' => [ $lei->can('dclose'), $lei ] }; my @first_batch = splice(@$upq, 0, $j); # initial parallelism $lei->{-upq} = $upq; - $lei->{daemon_pid} = $$; $lei->event_step_init; # wait for client disconnects for my $out (@first_batch) { PublicInbox::DS::requeue( @@ -162,9 +164,8 @@ sub _complete_up { # lei__complete hook map { $match_cb->($_) } PublicInbox::LeiSavedSearch::list($lei); } -sub _wq_done_wait { # dwaitpid callback - my ($arg, $pid) = @_; - my ($wq, $lei) = @$arg; +sub _wq_done_wait { # awaitpid cb + my ($pid, $wq, $lei) = @_; $lei->child_error($?, 'auth failure') if $? } @@ -172,8 +173,7 @@ no warnings 'once'; *ipc_atfork_child = \&PublicInbox::LeiInput::input_only_atfork_child; package PublicInbox::LeiUp1; # for redispatch_all -use strict; -use v5.10.1; +use v5.12; sub nxt ($$$) { my ($lei, $out, $op_p) = @_; @@ -210,8 +210,8 @@ sub event_step { # runs via PublicInbox::DS::requeue sub DESTROY { my ($self) = @_; + return if ($PublicInbox::LEI::daemon_pid // -1) != $$; my $lei = $self->{lei}; # the original, from lei_up - return if $lei->{daemon_pid} != $$; my $sock = delete $self->{unref_on_destroy}; my $s = $lei->{-socks} // []; @$s = grep { $_ != $sock } @$s; |