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