Event pipe: process data after recv_chain() errors.

When c->recv_chain() returns an error, it is possible that we already
have some data previously read, e.g., in preread buffer.  And in some
cases it may be even a complete response.  Changed c->recv_chain() error
handling to process the data, much like it is already done if kevent
reports about an error.

This change, in particular, fixes processing of small responses
when an upstream fails to properly close a connection with lingering and
therefore the connection is reset, but the response is already fully
obtained by nginx (see ticket #1037).
This commit is contained in:
Maxim Dounin 2016-09-01 18:29:55 +03:00
parent 9c0040b43c
commit 7ee778693e

View file

@ -300,7 +300,7 @@ ngx_event_pipe_read_upstream(ngx_event_pipe_t *p)
if (n == NGX_ERROR) {
p->upstream_error = 1;
return NGX_ERROR;
break;
}
if (n == NGX_AGAIN) {