]> Sergey Matveev's repositories - public-inbox.git/commitdiff
lei up: actually rely on DESTROY for --alllll
authorEric Wong <e@80x24.org>
Thu, 14 Oct 2021 13:16:08 +0000 (13:16 +0000)
committerEric Wong <e@80x24.org>
Fri, 15 Oct 2021 02:23:27 +0000 (02:23 +0000)
We need to use DESTROY here to ensure we wait for workers, too;
not just the initial dispatch.

Fixes: cafbd77b3c82167d ("lei up: avoid excessively parallel --all")
lib/PublicInbox/LeiUp.pm

index 3011300dd8369b1f9ff36894e5b5c70cb394c0b3..719736e8597ef7efcd30f8504b68d922773f3f13 100644 (file)
@@ -63,6 +63,7 @@ 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(
@@ -158,18 +159,22 @@ sub event_step { # runs via PublicInbox::DS::requeue
        $l->{opt} = { %{$l->{opt}} }; # deep copy
        delete $l->{opt}->{all};
        $l->qerr("# updating $self->{out}");
-       $l->{up_op_p} = $self->{op_p}; # ($l => $lei => script/lei)
+       my $o = " (output: $self->{out})"; # add to all warnings
        my $cb = $SIG{__WARN__} // \&CORE::warn;
-       my $o = " (output: $self->{out})";
        local $SIG{__WARN__} = sub {
                my @m = @_;
                push(@m, $o) if !@m || $m[-1] !~ s/\n\z/$o\n/;
                $cb->(@m);
        };
+       $l->{-up1} = $self;
        eval { $l->dispatch('up', $self->{out}) };
        $lei->child_error(0, $@) if $@ || $l->{failed}; # lei->fail()
+}
 
-       # onto the next:
+sub DESTROY {
+       my ($self) = @_;
+       my $lei = $self->{lei}; # the original, from lei_up
+       return if $lei->{daemon_pid} != $$;
        my $out = shift(@{$lei->{-upq}}) or return;
        PublicInbox::DS::requeue(nxt($lei, $out, $self->{op_p}));
 }