about summary refs log tree commit homepage
path: root/lib/PublicInbox/LeiUp.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/PublicInbox/LeiUp.pm')
-rw-r--r--lib/PublicInbox/LeiUp.pm26
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;