aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2016-09-01 18:29:55 +0300
committerMaxim Dounin <mdounin@mdounin.ru>2016-09-01 18:29:55 +0300
commit4e8a73adaa7b5bddeba01daf1965d66a897f066d (patch)
tree926699f94a85e2114cf5ce5a9ad743332bb26996 /src
parentc6ba4aae38af53a378a57fd196fe32ccb3b4131d (diff)
downloadnginx-4e8a73adaa7b5bddeba01daf1965d66a897f066d.tar.gz
nginx-4e8a73adaa7b5bddeba01daf1965d66a897f066d.zip
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).
Diffstat (limited to 'src')
-rw-r--r--src/event/ngx_event_pipe.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/event/ngx_event_pipe.c b/src/event/ngx_event_pipe.c
index 5ce59ae09..981646792 100644
--- a/src/event/ngx_event_pipe.c
+++ b/src/event/ngx_event_pipe.c
@@ -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) {