summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/nxt_h1proto.c5
-rw-r--r--src/nxt_http_proxy.c7
2 files changed, 9 insertions, 3 deletions
diff --git a/src/nxt_h1proto.c b/src/nxt_h1proto.c
index 5d1ed790..48c2697b 100644
--- a/src/nxt_h1proto.c
+++ b/src/nxt_h1proto.c
@@ -2869,6 +2869,11 @@ nxt_h1p_peer_body_process(nxt_task_t *task, nxt_http_peer_t *peer,
} else if (h1p->remainder > 0) {
length = nxt_buf_chain_length(out);
h1p->remainder -= length;
+
+ if (h1p->remainder == 0) {
+ nxt_buf_chain_add(&out, nxt_http_buf_last(peer->request));
+ peer->closed = 1;
+ }
}
peer->body = out;
diff --git a/src/nxt_http_proxy.c b/src/nxt_http_proxy.c
index 6aa3aabb..7f6ad686 100644
--- a/src/nxt_http_proxy.c
+++ b/src/nxt_http_proxy.c
@@ -381,9 +381,10 @@ nxt_http_proxy_error(nxt_task_t *task, void *obj, void *data)
r = obj;
peer = r->peer;
- nxt_http_proto[peer->protocol].peer_close(task, peer);
-
- nxt_mp_release(r->mem_pool);
+ if (!peer->closed) {
+ nxt_http_proto[peer->protocol].peer_close(task, peer);
+ nxt_mp_release(r->mem_pool);
+ }
nxt_http_request_error(&r->task, r, peer->status);
}