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) <noreply@anthropic.com>
This commit is contained in:
Claude Code 2026-03-29 21:08:56 +08:00
parent 0de6e878ba
commit 3a20bbb4f0
No known key found for this signature in database

View file

@ -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;
}
}