From 22c88f0253d57756ad541326df09d1398a871708 Mon Sep 17 00:00:00 2001 From: Igor Sysoev Date: Mon, 7 Sep 2020 15:21:14 +0300 Subject: [PATCH] Upstream connection was not closed for short chunked response. --- src/nxt_http_proxy.c | 40 ++++++++-------------------------------- 1 file changed, 8 insertions(+), 32 deletions(-) diff --git a/src/nxt_http_proxy.c b/src/nxt_http_proxy.c index 34d0f36e..338d9fce 100644 --- a/src/nxt_http_proxy.c +++ b/src/nxt_http_proxy.c @@ -27,7 +27,6 @@ static void nxt_http_proxy_header_send(nxt_task_t *task, void *obj, void *data); static void nxt_http_proxy_header_sent(nxt_task_t *task, void *obj, void *data); static void nxt_http_proxy_header_read(nxt_task_t *task, void *obj, void *data); static void nxt_http_proxy_send_body(nxt_task_t *task, void *obj, void *data); -static void nxt_http_proxy_read(nxt_task_t *task, void *obj, void *data); static void nxt_http_proxy_buf_mem_completion(nxt_task_t *task, void *obj, void *data); static void nxt_http_proxy_error(nxt_task_t *task, void *obj, void *data); @@ -275,6 +274,14 @@ nxt_http_proxy_header_read(nxt_task_t *task, void *obj, void *data) } +static const nxt_http_request_state_t nxt_http_proxy_read_state + nxt_aligned(64) = +{ + .ready_handler = nxt_http_proxy_send_body, + .error_handler = nxt_http_proxy_error, +}; + + static void nxt_http_proxy_send_body(nxt_task_t *task, void *obj, void *data) { @@ -289,37 +296,6 @@ nxt_http_proxy_send_body(nxt_task_t *task, void *obj, void *data) if (out != NULL) { peer->body = NULL; nxt_http_request_send(task, r, out); - - } - - if (!peer->closed) { - nxt_http_proto[peer->protocol].peer_read(task, peer); - } -} - - -static const nxt_http_request_state_t nxt_http_proxy_read_state - nxt_aligned(64) = -{ - .ready_handler = nxt_http_proxy_read, - .error_handler = nxt_http_proxy_error, -}; - - -static void -nxt_http_proxy_read(nxt_task_t *task, void *obj, void *data) -{ - nxt_buf_t *out; - nxt_http_peer_t *peer; - nxt_http_request_t *r; - - r = obj; - peer = data; - out = peer->body; - peer->body = NULL; - - if (out != NULL) { - nxt_http_request_send(task, r, out); } if (!peer->closed) {