Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nginx/nginx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/event/ngx_event_pipe.c')
-rw-r--r--src/event/ngx_event_pipe.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/event/ngx_event_pipe.c b/src/event/ngx_event_pipe.c
index 779ec1867..0c499a831 100644
--- a/src/event/ngx_event_pipe.c
+++ b/src/event/ngx_event_pipe.c
@@ -407,12 +407,15 @@ ngx_event_pipe_read_upstream(ngx_event_pipe_t *p)
static ngx_int_t
ngx_event_pipe_write_to_downstream(ngx_event_pipe_t *p)
{
- size_t bsize;
- ngx_uint_t flush;
- ngx_chain_t *out, **ll, *cl;
+ size_t bsize;
+ ngx_uint_t flush;
+ ngx_chain_t *out, **ll, *cl;
+ ngx_connection_t *downstream;
+
+ downstream = p->downstream;
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, p->log, 0,
- "pipe write downstream: %d", p->downstream->write->ready);
+ "pipe write downstream: %d", downstream->write->ready);
for ( ;; ) {
if (p->downstream_error) {
@@ -452,6 +455,11 @@ ngx_event_pipe_write_to_downstream(ngx_event_pipe_t *p)
}
if (p->output_filter(p->output_ctx, p->in) == NGX_ERROR) {
+
+ if (downstream->destroyed) {
+ return NGX_ABORT;
+ }
+
p->downstream_error = 1;
return ngx_event_pipe_drain_chains(p);
}
@@ -468,9 +476,9 @@ ngx_event_pipe_write_to_downstream(ngx_event_pipe_t *p)
break;
}
- if (p->downstream->data != p->output_ctx
- || !p->downstream->write->ready
- || p->downstream->write->delayed)
+ if (downstream->data != p->output_ctx
+ || !downstream->write->ready
+ || downstream->write->delayed)
{
break;
}