FastCGI: Improve handling of EPIPE while writing response
That would previously result in the worker getting killed with SIGPIPE. Which works, but we can also recover from that error without restarting the process.
This commit is contained in:
parent
d300f4d791
commit
48fe393d5f
4 changed files with 34 additions and 15 deletions
11
FU.pm
11
FU.pm
|
|
@ -292,7 +292,8 @@ sub _read_req($c) {
|
|||
: $r == -2 ? "I/O error while reading from FastCGI socket\n"
|
||||
: $r == -3 ? "FastCGI protocol error\n"
|
||||
: $r == -4 ? "Too long FastCGI parameter\n"
|
||||
: $r == -5 ? "Too long request body\n" : undef if $r != -7;
|
||||
: $r == -5 ? "Too long request body\n"
|
||||
: $r == -8 ? "I/O error while writing to FastCGI socket\n" : undef if $r != -7;
|
||||
delete $c->{fcgi_obj};
|
||||
fu->error(-1);
|
||||
}
|
||||
|
|
@ -400,7 +401,13 @@ sub _do_req($c) {
|
|||
}
|
||||
|
||||
$REQ->{trace_end} = clock_gettime(CLOCK_MONOTONIC);
|
||||
fu->_flush($c->{fcgi_obj} || $c->{client_sock});
|
||||
eval {
|
||||
fu->_flush($c->{fcgi_obj} || $c->{client_sock});
|
||||
1;
|
||||
} || do {
|
||||
log_write "Error writing response: $@\n";
|
||||
$c->{client_sock} = $c->{fcgi_obj} = undef;
|
||||
};
|
||||
|
||||
if (debug && $REQ->{trace_id} && $debug_info->{history} && $debug_info->{storage}) {
|
||||
require FU::DebugImpl;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue