stream: fix server stop accepting after uv_accept() error

When uv__stream_open() fails inside uv_accept(), the accepted fd is
closed but POLLIN is never re-enabled on the server's IO watcher.
The condition `if (err == 0)` prevents uv__io_start() from being
called on the error path, causing the server to permanently stop
accepting new connections.

Fix by removing the err == 0 guard so POLLIN is re-enabled
unconditionally when no queued fds are present.
This commit is contained in:
ivinx 2026-03-30 09:55:41 +09:00
parent 84816e064a
commit 70668ac5c9

View File

@ -547,7 +547,6 @@ int uv_accept(uv_stream_t* server, uv_stream_t* client) {
server->accepted_fd,
UV_HANDLE_READABLE | UV_HANDLE_WRITABLE);
if (err) {
/* TODO handle error */
uv__close(server->accepted_fd);
goto done;
}
@ -590,8 +589,7 @@ done:
}
} else {
server->accepted_fd = -1;
if (err == 0)
uv__io_start(server->loop, &server->io_watcher, POLLIN);
uv__io_start(server->loop, &server->io_watcher, POLLIN);
}
return err;
}