From 76364bdd29acef7698b0a73d4bc65f2e91eb50f4 Mon Sep 17 00:00:00 2001 From: Roman Arutyunyan Date: Thu, 20 Aug 2026 16:53:42 +0400 Subject: [PATCH] Core: delete accept timer on worker shutdown Previously, when the worker file descriptor table was full, a listen connection might be disabled and a timeout might be set for re-enabling it. If during this period the worker received the NGX_CMD_QUIT signal, the accept connection would be recycled, but the timer would remain set. On timer expiration, an attempt to accept a new connection would result in "accept4() failed (9: Bad file descriptor)" alert because c->fd was reset to -1. Fix is to delete accept timer when closing listen connections. --- src/core/ngx_connection.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/core/ngx_connection.c b/src/core/ngx_connection.c index 33b9b1607..7ea7706e5 100644 --- a/src/core/ngx_connection.c +++ b/src/core/ngx_connection.c @@ -1166,6 +1166,10 @@ ngx_close_listening_sockets(ngx_cycle_t *cycle) } } + if (c->read->timer_set) { + ngx_del_timer(c->read); + } + ngx_free_connection(c); c->fd = (ngx_socket_t) -1;