# HG changeset patch # User Maxim Dounin # Date 1425321882 -10800 # Node ID 5f179f34409649a896f71cd2e2ad34eab62b410d # Parent 5abf5af257a7a5b62fb092f50269fc569f51bbeb Upstream: upstream argument in ngx_http_upstream_process_request(). In case of filter finalization, r->upstream might be changed during the ngx_event_pipe() call. Added an argument to preserve it while calling the ngx_http_upstream_process_request() function. diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c --- a/src/http/ngx_http_upstream.c +++ b/src/http/ngx_http_upstream.c @@ -76,7 +76,8 @@ static ngx_int_t ngx_http_upstream_non_b static void ngx_http_upstream_process_downstream(ngx_http_request_t *r); static void ngx_http_upstream_process_upstream(ngx_http_request_t *r, ngx_http_upstream_t *u); -static void ngx_http_upstream_process_request(ngx_http_request_t *r); +static void ngx_http_upstream_process_request(ngx_http_request_t *r, + ngx_http_upstream_t *u); static void ngx_http_upstream_store(ngx_http_request_t *r, ngx_http_upstream_t *u); static void ngx_http_upstream_dummy_handler(ngx_http_request_t *r, @@ -3349,7 +3350,7 @@ ngx_http_upstream_process_downstream(ngx } } - ngx_http_upstream_process_request(r); + ngx_http_upstream_process_request(r, u); } @@ -3417,18 +3418,17 @@ ngx_http_upstream_process_upstream(ngx_h } } - ngx_http_upstream_process_request(r); + ngx_http_upstream_process_request(r, u); } static void -ngx_http_upstream_process_request(ngx_http_request_t *r) +ngx_http_upstream_process_request(ngx_http_request_t *r, + ngx_http_upstream_t *u) { ngx_temp_file_t *tf; ngx_event_pipe_t *p; - ngx_http_upstream_t *u; - - u = r->upstream; + p = u->pipe; if (u->peer.connection) {