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.
This commit is contained in:
Roman Arutyunyan 2026-08-20 16:53:42 +04:00 • committed by Roman Arutyunyan
parent ee03ec42c4
commit 76364bdd29

View file

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