summaryrefslogtreecommitdiffhomepage
path: root/src/nxt_http_proxy.c
diff options
context:
space:
mode:
authorZhidao HONG <z.hong@f5.com>2024-09-09 23:15:29 +0800
committerZhidao HONG <z.hong@f5.com>2024-09-10 10:12:39 +0800
commit5fde2ff79c92e2bb2ff67e4537640af7d06e73b6 (patch)
treed51f2e3653e21b151262641520f7fffa41a24133 /src/nxt_http_proxy.c
parentcff5e092afec17c73a0f94d75276500fd9da8403 (diff)
downloadunit-5fde2ff79c92e2bb2ff67e4537640af7d06e73b6.tar.gz
unit-5fde2ff79c92e2bb2ff67e4537640af7d06e73b6.tar.bz2
http: Fix router process crash whilst using proxy
When the client closes the connection before the upstream, the proxy's error handler was calling cleanup operation like peer close and request close twice, this fix ensures the cleanup is performed only once, improving proxy stability. Closes: https://github.com/nginx/unit/issues/828
Diffstat (limited to 'src/nxt_http_proxy.c')
-rw-r--r--src/nxt_http_proxy.c7
1 files changed, 4 insertions, 3 deletions
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);
}