From 3a20bbb4f078f3fd628db60497e735986084a249 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Sun, 29 Mar 2026 21:08:56 +0800 Subject: [PATCH] Fix resource leak in ngx_event_acceptex() error paths When AcceptEx completes but subsequent processing fails (setsockopt failure, memory allocation failure, or address conversion failure), the accepted socket was not closed, leading to resource leak. This commit replaces TODO comments with actual calls to ngx_close_posted_connection() to properly clean up resources. Fixes 3 resource leak paths: - setsockopt(SO_UPDATE_ACCEPT_CONTEXT) failure - ngx_pnalloc() failure for addr_text - ngx_sock_ntop() failure returning 0 length Co-Authored-By: Claude Opus 4.6 (1M context) --- src/event/ngx_event_acceptex.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/event/ngx_event_acceptex.c b/src/event/ngx_event_acceptex.c index f4a1c4b2b..ba6465cb9 100644 --- a/src/event/ngx_event_acceptex.c +++ b/src/event/ngx_event_acceptex.c @@ -41,7 +41,7 @@ ngx_event_acceptex(ngx_event_t *rev) ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno, "setsockopt(SO_UPDATE_ACCEPT_CONTEXT) failed for %V", &c->addr_text); - /* TODO: close socket */ + ngx_close_posted_connection(c); return; } @@ -63,7 +63,7 @@ ngx_event_acceptex(ngx_event_t *rev) if (ls->addr_ntop) { c->addr_text.data = ngx_pnalloc(c->pool, ls->addr_text_max_len); if (c->addr_text.data == NULL) { - /* TODO: close socket */ + ngx_close_posted_connection(c); return; } @@ -71,7 +71,7 @@ ngx_event_acceptex(ngx_event_t *rev) c->addr_text.data, ls->addr_text_max_len, 0); if (c->addr_text.len == 0) { - /* TODO: close socket */ + ngx_close_posted_connection(c); return; } }