]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/Qspawn.pm
git: fix asynchronous batching for deep pipelines
[public-inbox.git] / lib / PublicInbox / Qspawn.pm
index 6e24538959517b00ec1179f87318a9d875ab3db8..297a284fd4c47deb224f9f7bbc01640fc9d91c31 100644 (file)
@@ -233,11 +233,17 @@ sub psgi_return_init_cb {
        if (ref($r) ne 'ARRAY' || scalar(@$r) == 3) { # error
                if ($async) { # calls rpipe->close && ->event_step
                        $async->close; # PublicInbox::HTTPD::Async::close
-               } else {
-                       $self->{rpipe}->close;
+               } else { # generic PSGI:
+                       delete($self->{rpipe})->close;
                        event_step($self);
+                       waitpid_err($self);
+               }
+               if (ref($r) eq 'ARRAY') { # error
+                       $wcb->($r)
+               } elsif (ref($r) eq 'CODE') { # chain another command
+                       $r->($wcb)
                }
-               $wcb->($r) if ref($r) eq 'ARRAY';
+               # else do nothing
        } elsif ($async) {
                # done reading headers, handoff to read body
                my $fh = $wcb->($r); # scalar @$r == 2