|
|
@ -79,7 +79,7 @@ static void uv__fast_poll_submit_poll_req(uv_loop_t* loop, uv_poll_t* handle) { |
|
|
|
handle->mask_events_2 = handle->events; |
|
|
|
} else if (handle->submitted_events_2 == 0) { |
|
|
|
req = &handle->poll_req_2; |
|
|
|
afd_poll_info = &handle->afd_poll_info_2; |
|
|
|
afd_poll_info = &handle->afd_poll_info_2.afd_poll_info_ptr[0]; |
|
|
|
handle->submitted_events_2 = handle->events; |
|
|
|
handle->mask_events_1 = handle->events; |
|
|
|
handle->mask_events_2 = 0; |
|
|
@ -119,18 +119,19 @@ static void uv__fast_poll_submit_poll_req(uv_loop_t* loop, uv_poll_t* handle) { |
|
|
|
|
|
|
|
|
|
|
|
static int uv__fast_poll_cancel_poll_req(uv_loop_t* loop, uv_poll_t* handle) { |
|
|
|
AFD_POLL_INFO afd_poll_info; |
|
|
|
int result; |
|
|
|
AFD_POLL_INFO* afd_poll_info; |
|
|
|
DWORD result; |
|
|
|
|
|
|
|
afd_poll_info.Exclusive = TRUE; |
|
|
|
afd_poll_info.NumberOfHandles = 1; |
|
|
|
afd_poll_info.Timeout.QuadPart = INT64_MAX; |
|
|
|
afd_poll_info.Handles[0].Handle = (HANDLE) handle->socket; |
|
|
|
afd_poll_info.Handles[0].Status = 0; |
|
|
|
afd_poll_info.Handles[0].Events = AFD_POLL_ALL; |
|
|
|
afd_poll_info = &handle->afd_poll_info_2.afd_poll_info_ptr[1]; |
|
|
|
afd_poll_info->Exclusive = TRUE; |
|
|
|
afd_poll_info->NumberOfHandles = 1; |
|
|
|
afd_poll_info->Timeout.QuadPart = INT64_MAX; |
|
|
|
afd_poll_info->Handles[0].Handle = (HANDLE) handle->socket; |
|
|
|
afd_poll_info->Handles[0].Status = 0; |
|
|
|
afd_poll_info->Handles[0].Events = AFD_POLL_ALL; |
|
|
|
|
|
|
|
result = uv_msafd_poll(handle->socket, |
|
|
|
&afd_poll_info, |
|
|
|
afd_poll_info, |
|
|
|
uv__get_overlapped_dummy()); |
|
|
|
|
|
|
|
if (result == SOCKET_ERROR) { |
|
|
@ -154,7 +155,7 @@ static void uv__fast_poll_process_poll_req(uv_loop_t* loop, uv_poll_t* handle, |
|
|
|
handle->submitted_events_1 = 0; |
|
|
|
mask_events = handle->mask_events_1; |
|
|
|
} else if (req == &handle->poll_req_2) { |
|
|
|
afd_poll_info = &handle->afd_poll_info_2; |
|
|
|
afd_poll_info = &handle->afd_poll_info_2.afd_poll_info_ptr[0]; |
|
|
|
handle->submitted_events_2 = 0; |
|
|
|
mask_events = handle->mask_events_2; |
|
|
|
} else { |
|
|
@ -546,7 +547,7 @@ int uv_poll_init_socket(uv_loop_t* loop, uv_poll_t* handle, |
|
|
|
handle->flags |= UV_HANDLE_POLL_SLOW; |
|
|
|
} |
|
|
|
|
|
|
|
/* Intialize 2 poll reqs. */ |
|
|
|
/* Initialize 2 poll reqs. */ |
|
|
|
handle->submitted_events_1 = 0; |
|
|
|
uv_req_init(loop, (uv_req_t*) &(handle->poll_req_1)); |
|
|
|
handle->poll_req_1.type = UV_POLL_REQ; |
|
|
@ -557,6 +558,11 @@ int uv_poll_init_socket(uv_loop_t* loop, uv_poll_t* handle, |
|
|
|
handle->poll_req_2.type = UV_POLL_REQ; |
|
|
|
handle->poll_req_2.data = handle; |
|
|
|
|
|
|
|
handle->afd_poll_info_2.afd_poll_info_ptr = malloc(sizeof(*handle->afd_poll_info_2.afd_poll_info_ptr) * 2); |
|
|
|
if (handle->afd_poll_info_2.afd_poll_info_ptr == NULL) { |
|
|
|
return UV_ENOMEM; |
|
|
|
} |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
@ -618,5 +624,9 @@ void uv_poll_endgame(uv_loop_t* loop, uv_poll_t* handle) { |
|
|
|
assert(handle->submitted_events_1 == 0); |
|
|
|
assert(handle->submitted_events_2 == 0); |
|
|
|
|
|
|
|
if (handle->afd_poll_info_2.afd_poll_info_ptr) { |
|
|
|
free(handle->afd_poll_info_2.afd_poll_info_ptr); |
|
|
|
handle->afd_poll_info_2.afd_poll_info_ptr = NULL; |
|
|
|
} |
|
|
|
uv__handle_close(handle); |
|
|
|
} |
|
|
|