diff --git a/src/port.c b/src/port.c index 7e6bb06..a5005d3 100644 --- a/src/port.c +++ b/src/port.c @@ -50,7 +50,7 @@ ep_port_t* ep_port_new(HANDLE* iocp_out) { memset(port_info, 0, sizeof *port_info); port_info->iocp = iocp; - queue_init(&port_info->update_queue); + queue_init(&port_info->sock_update_queue); tree_init(&port_info->sock_tree); reflock_tree_node_init(&port_info->handle_tree_node); InitializeCriticalSection(&port_info->lock); @@ -113,12 +113,12 @@ int ep_port_delete(ep_port_t* port_info) { } static int _ep_port_update_events(ep_port_t* port_info) { - queue_t* update_queue = &port_info->update_queue; + queue_t* sock_update_queue = &port_info->sock_update_queue; /* Walk the queue, submitting new poll requests for every socket that needs * it. */ - while (!queue_empty(update_queue)) { - queue_node_t* queue_node = queue_first(update_queue); + while (!queue_empty(sock_update_queue)) { + queue_node_t* queue_node = queue_first(sock_update_queue); ep_sock_t* sock_info = container_of(queue_node, ep_sock_t, queue_node); if (ep_sock_update(port_info, sock_info) < 0) @@ -382,20 +382,14 @@ void ep_port_release_poll_group(poll_group_t* poll_group) { void ep_port_request_socket_update(ep_port_t* port_info, ep_sock_t* sock_info) { - if (ep_port_is_socket_update_pending(port_info, sock_info)) + if (queue_enqueued(&sock_info->queue_node)) return; - queue_append(&port_info->update_queue, &sock_info->queue_node); - assert(ep_port_is_socket_update_pending(port_info, sock_info)); + queue_append(&port_info->sock_update_queue, &sock_info->queue_node); } -void ep_port_clear_socket_update(ep_port_t* port_info, ep_sock_t* sock_info) { - if (!ep_port_is_socket_update_pending(port_info, sock_info)) +void ep_port_cancel_socket_update(ep_port_t* port_info, ep_sock_t* sock_info) { + unused(port_info); + if (!queue_enqueued(&sock_info->queue_node)) return; queue_remove(&sock_info->queue_node); } - -bool ep_port_is_socket_update_pending(ep_port_t* port_info, - ep_sock_t* sock_info) { - unused(port_info); - return queue_enqueued(&sock_info->queue_node); -} diff --git a/src/port.h b/src/port.h index 1c31f8f..beaf7ef 100644 --- a/src/port.h +++ b/src/port.h @@ -20,7 +20,7 @@ typedef struct ep_port { poll_group_allocator_t* poll_group_allocators[array_count(AFD_PROVIDER_GUID_LIST)]; tree_t sock_tree; - queue_t update_queue; + queue_t sock_update_queue; reflock_tree_node_t handle_tree_node; CRITICAL_SECTION lock; size_t active_poll_count; @@ -56,9 +56,7 @@ WEPOLL_INTERNAL ep_sock_t* ep_port_find_socket(ep_port_t* port_info, WEPOLL_INTERNAL void ep_port_request_socket_update(ep_port_t* port_info, ep_sock_t* sock_info); -WEPOLL_INTERNAL void ep_port_clear_socket_update(ep_port_t* port_info, - ep_sock_t* sock_info); -WEPOLL_INTERNAL bool ep_port_is_socket_update_pending(ep_port_t* port_info, - ep_sock_t* sock_info); +WEPOLL_INTERNAL void ep_port_cancel_socket_update(ep_port_t* port_info, + ep_sock_t* sock_info); #endif /* WEPOLL_PORT_H_ */ diff --git a/src/sock.c b/src/sock.c index 0fd0ed4..094f5d9 100644 --- a/src/sock.c +++ b/src/sock.c @@ -217,7 +217,7 @@ void ep_sock_delete(ep_port_t* port_info, ep_sock_t* sock_info) { } ep_port_del_socket(port_info, sock_info); - ep_port_clear_socket_update(port_info, sock_info); + ep_port_cancel_socket_update(port_info, sock_info); ep_port_release_poll_group(sock_private->poll_group); sock_private->poll_group = NULL; @@ -257,8 +257,6 @@ int ep_sock_update(ep_port_t* port_info, ep_sock_t* sock_info) { SOCKET driver_socket = poll_group_get_socket(sock_private->poll_group); bool socket_closed = false; - assert(ep_port_is_socket_update_pending(port_info, sock_info)); - if ((sock_private->poll_status == _POLL_PENDING) && (sock_private->user_events & _KNOWN_EPOLL_EVENTS & ~sock_private->pending_events) == 0) { @@ -303,7 +301,7 @@ int ep_sock_update(ep_port_t* port_info, ep_sock_t* sock_info) { assert(false); } - ep_port_clear_socket_update(port_info, sock_info); + ep_port_cancel_socket_update(port_info, sock_info); /* If we saw an ERROR_INVALID_HANDLE error, drop the socket. */ if (socket_closed)