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 c6ba4aae38
commit 4e8a73adaa

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) {