diff --git a/src/epoll-socket.c b/src/epoll-socket.c index c4d2ca0..a51c2fb 100644 --- a/src/epoll-socket.c +++ b/src/epoll-socket.c @@ -150,7 +150,7 @@ void ep_sock_delete(ep_port_t* port_info, ep_sock_t* sock_info) { void ep_sock_force_delete(ep_port_t* port_info, ep_sock_t* sock_info) { _ep_sock_private_t* sock_private = _ep_sock_private(sock_info); if (sock_private->latest_poll_req != NULL) - poll_req_delete(port_info, sock_info, sock_private->latest_poll_req); + poll_req_delete(sock_info, sock_private->latest_poll_req); assert(sock_private->poll_req_count == 0); ep_sock_delete(port_info, sock_info); } @@ -163,20 +163,17 @@ ep_sock_t* ep_sock_find(tree_t* tree, SOCKET socket) { return container_of(tree_node, ep_sock_t, tree_node); } -void ep_sock_register_poll_req(ep_port_t* port_info, ep_sock_t* sock_info) { +void ep_sock_register_poll_req(ep_sock_t* sock_info) { _ep_sock_private_t* sock_private = _ep_sock_private(sock_info); - assert(!_ep_sock_is_deleted(sock_private)); - ep_port_add_req(port_info); sock_private->poll_req_count++; assert(sock_private->poll_req_count == 1); } -void ep_sock_unregister_poll_req(ep_port_t* port_info, ep_sock_t* sock_info) { +void ep_sock_unregister_poll_req(ep_sock_t* sock_info) { _ep_sock_private_t* sock_private = _ep_sock_private(sock_info); - ep_port_del_req(port_info); sock_private->poll_req_count--; assert(sock_private->poll_req_count == 0); @@ -251,7 +248,7 @@ int ep_sock_update(ep_port_t* port_info, ep_sock_t* sock_info) { } } else { - poll_req_t* poll_req = poll_req_new(port_info, &sock_private->pub); + poll_req_t* poll_req = poll_req_new(&sock_private->pub); if (poll_req == NULL) return -1; @@ -259,7 +256,7 @@ int ep_sock_update(ep_port_t* port_info, ep_sock_t* sock_info) { sock_private->user_events, sock_private->afd_socket, driver_socket) < 0) { - poll_req_delete(port_info, &sock_private->pub, poll_req); + poll_req_delete(&sock_private->pub, poll_req); if (GetLastError() == ERROR_INVALID_HANDLE) /* The socket is broken. It will be dropped from the epoll set. */ @@ -297,7 +294,7 @@ int ep_sock_feed_event(ep_port_t* port_info, /* Ignore completion for overlapped poll operation if it isn't * the the most recently posted one, or if the socket has been * deleted. */ - poll_req_delete(port_info, sock_info, poll_req); + poll_req_delete(sock_info, poll_req); return 0; } @@ -320,7 +317,7 @@ int ep_sock_feed_event(ep_port_t* port_info, ev_count = 1; } - poll_req_delete(port_info, sock_info, poll_req); + poll_req_delete(sock_info, poll_req); if (drop_socket) /* Drop the socket from the epoll set. */ diff --git a/src/epoll-socket.h b/src/epoll-socket.h index d554d10..baafd60 100644 --- a/src/epoll-socket.h +++ b/src/epoll-socket.h @@ -35,9 +35,7 @@ EPOLL_INTERNAL int ep_sock_feed_event(ep_port_t* port_info, poll_req_t* poll_req, struct epoll_event* ev); -EPOLL_INTERNAL void ep_sock_register_poll_req(ep_port_t* port_info, - ep_sock_t* sock_info); -EPOLL_INTERNAL void ep_sock_unregister_poll_req(ep_port_t* port_info, - ep_sock_t* sock_info); +EPOLL_INTERNAL void ep_sock_register_poll_req(ep_sock_t* sock_info); +EPOLL_INTERNAL void ep_sock_unregister_poll_req(ep_sock_t* sock_info); #endif /* EPOLL_SOCK_DATA_H_ */ diff --git a/src/epoll.c b/src/epoll.c index 78fea27..29c324b 100644 --- a/src/epoll.c +++ b/src/epoll.c @@ -253,14 +253,6 @@ int ep_port_del_socket(ep_port_t* port_info, tree_node_t* tree_node) { return tree_del(&port_info->sock_tree, tree_node); } -void ep_port_add_req(ep_port_t* port_info) { - port_info->poll_req_count++; -} - -void ep_port_del_req(ep_port_t* port_info) { - port_info->poll_req_count--; -} - poll_group_allocator_t* _get_poll_group_allocator( ep_port_t* port_info, size_t index, diff --git a/src/poll-request.c b/src/poll-request.c index 2a033c4..3cd2869 100644 --- a/src/poll-request.c +++ b/src/poll-request.c @@ -30,7 +30,7 @@ static inline poll_req_t* _poll_req_free(poll_req_t* poll_req) { return NULL; } -poll_req_t* poll_req_new(ep_port_t* port_info, ep_sock_t* sock_info) { +poll_req_t* poll_req_new(ep_sock_t* sock_info) { poll_req_t* poll_req = _poll_req_alloc(); if (poll_req == NULL) return NULL; @@ -38,17 +38,15 @@ poll_req_t* poll_req_new(ep_port_t* port_info, ep_sock_t* sock_info) { memset(poll_req, 0, sizeof *poll_req); poll_req->sock_info = sock_info; - ep_sock_register_poll_req(port_info, sock_info); + ep_sock_register_poll_req(sock_info); return poll_req; } -void poll_req_delete(ep_port_t* port_info, - ep_sock_t* sock_info, - poll_req_t* poll_req) { +void poll_req_delete(ep_sock_t* sock_info, poll_req_t* poll_req) { assert(poll_req != NULL); - ep_sock_unregister_poll_req(port_info, sock_info); + ep_sock_unregister_poll_req(sock_info); _poll_req_free(poll_req); } diff --git a/src/poll-request.h b/src/poll-request.h index 02ba3fb..5997e97 100644 --- a/src/poll-request.h +++ b/src/poll-request.h @@ -12,11 +12,9 @@ typedef struct ep_port ep_port_t; typedef struct ep_sock ep_sock_t; typedef struct poll_req poll_req_t; -EPOLL_INTERNAL poll_req_t* poll_req_new(ep_port_t* port_info, - ep_sock_t* sock_info); +EPOLL_INTERNAL poll_req_t* poll_req_new(ep_sock_t* sock_info); -EPOLL_INTERNAL void poll_req_delete(ep_port_t* port_info, - ep_sock_t* sock_info, +EPOLL_INTERNAL void poll_req_delete(ep_sock_t* sock_info, poll_req_t* poll_req); EPOLL_INTERNAL poll_req_t* overlapped_to_poll_req(OVERLAPPED* overlapped); diff --git a/src/port.h b/src/port.h index 8ada7cd..ee84424 100644 --- a/src/port.h +++ b/src/port.h @@ -20,7 +20,6 @@ typedef struct ep_port { poll_group_allocators[array_count(AFD_PROVIDER_GUID_LIST)]; tree_t sock_tree; queue_t update_queue; - size_t poll_req_count; } ep_port_t; EPOLL_INTERNAL ep_port_t* ep_port_new(HANDLE iocp); @@ -36,9 +35,6 @@ EPOLL_INTERNAL int ep_port_add_socket(ep_port_t* port_info, EPOLL_INTERNAL int ep_port_del_socket(ep_port_t* port_info, tree_node_t* tree_node); -EPOLL_INTERNAL void ep_port_add_req(ep_port_t* port_info); -EPOLL_INTERNAL void ep_port_del_req(ep_port_t* port_info); - EPOLL_INTERNAL void ep_port_request_socket_update(ep_port_t* port_info, ep_sock_t* sock_info); EPOLL_INTERNAL void ep_port_clear_socket_update(ep_port_t* port_info,