From 0b0d9b7f6237593c69dc38ec64566343fd20191c Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Mon, 7 Mar 2016 19:10:33 +0000 Subject: git-http-backend: check EINTR as well as EAGAIN The blocking PSGI server may cause EINTR to be hit, here. --- lib/PublicInbox/GitHTTPBackend.pm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'lib/PublicInbox/GitHTTPBackend.pm') diff --git a/lib/PublicInbox/GitHTTPBackend.pm b/lib/PublicInbox/GitHTTPBackend.pm index a7cac100..30efa839 100644 --- a/lib/PublicInbox/GitHTTPBackend.pm +++ b/lib/PublicInbox/GitHTTPBackend.pm @@ -205,18 +205,18 @@ sub serve_smart { ref($dumb) eq 'ARRAY' ? $res->($dumb) : $dumb->($res); }; my $fail = sub { - my ($e) = @_; - if ($e eq 'EAGAIN') { + if ($!{EAGAIN} || $!{EINTR}) { select($vin, undef, undef, undef) if defined $vin; # $vin is undef on async, so this is a noop on EAGAIN return; } + my $e = $!; $end->(); $err->print("git http-backend ($git_dir): $e\n"); }; my $cb = sub { # read git-http-backend output and stream to client my $r = $rpipe ? $rpipe->sysread($buf, 8192, length($buf)) : 0; - return $fail->($!{EAGAIN} ? 'EAGAIN' : $!) unless defined $r; + return $fail->() unless defined $r; return $end->() if $r == 0; # EOF if ($fh) { # stream body from git-http-backend to HTTP client $fh->write($buf); -- cgit v1.2.3-24-ge0c7