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:
parent
84816e064a
commit
70668ac5c9
@ -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;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user