about summary refs log tree commit homepage
diff options
context:
space:
mode:
-rw-r--r--lib/PublicInbox/Qspawn.pm11
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/PublicInbox/Qspawn.pm b/lib/PublicInbox/Qspawn.pm
index 697c55a1..4950da25 100644
--- a/lib/PublicInbox/Qspawn.pm
+++ b/lib/PublicInbox/Qspawn.pm
@@ -31,14 +31,19 @@ sub _do_spawn {
 sub finish ($) {
         my ($self) = @_;
         my $limiter = $self->{limiter};
+        my $running;
         if (delete $self->{rpipe}) {
                 my $pid = delete $self->{pid};
                 $self->{err} = $pid == waitpid($pid, 0) ? $? :
                                 "PID:$pid still running?";
-                $limiter->{running}--;
+                $running = --$limiter->{running};
         }
-        if (my $next = shift @{$limiter->{run_queue}}) {
-                _do_spawn(@$next);
+
+        # limiter->{max} may change dynamically
+        if (($running || $limiter->{running}) < $limiter->{max}) {
+                if (my $next = shift @{$limiter->{run_queue}}) {
+                        _do_spawn(@$next);
+                }
         }
         $self->{err};
 }