windows: fix memory corruption when closing shared server sockets
This commit is contained in:
parent
ad7b48aeec
commit
24c062cc3e
@ -547,7 +547,7 @@ int uv_tcp_listen(uv_tcp_t* handle, int backlog, uv_connection_cb cb) {
|
|||||||
|
|
||||||
if(!handle->accept_reqs) {
|
if(!handle->accept_reqs) {
|
||||||
handle->accept_reqs = (uv_tcp_accept_t*)
|
handle->accept_reqs = (uv_tcp_accept_t*)
|
||||||
malloc(simultaneous_accepts * sizeof(uv_tcp_accept_t));
|
malloc(uv_simultaneous_server_accepts * sizeof(uv_tcp_accept_t));
|
||||||
if (!handle->accept_reqs) {
|
if (!handle->accept_reqs) {
|
||||||
uv_fatal_error(ERROR_OUTOFMEMORY, "malloc");
|
uv_fatal_error(ERROR_OUTOFMEMORY, "malloc");
|
||||||
}
|
}
|
||||||
@ -571,6 +571,18 @@ int uv_tcp_listen(uv_tcp_t* handle, int backlog, uv_connection_cb cb) {
|
|||||||
|
|
||||||
uv_tcp_queue_accept(handle, req);
|
uv_tcp_queue_accept(handle, req);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Initialize other unused requests too, because uv_tcp_endgame */
|
||||||
|
/* doesn't know how how many requests were intialized, so it will */
|
||||||
|
/* try to clean up {uv_simultaneous_server_accepts} requests. */
|
||||||
|
for (i = simultaneous_accepts; i < uv_simultaneous_server_accepts; i++) {
|
||||||
|
req = &handle->accept_reqs[i];
|
||||||
|
uv_req_init(loop, (uv_req_t*) req);
|
||||||
|
req->type = UV_ACCEPT;
|
||||||
|
req->accept_socket = INVALID_SOCKET;
|
||||||
|
req->data = handle;
|
||||||
|
req->wait_handle = INVALID_HANDLE_VALUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user