diff --git a/src/epoll-socket.c b/src/epoll-socket.c index 1032045..ffb74f8 100644 --- a/src/epoll-socket.c +++ b/src/epoll-socket.c @@ -88,6 +88,14 @@ int ep_sock_delete(ep_port_t* port_info, ep_sock_t* sock_info) { return 0; } +ep_sock_t* ep_sock_find(tree_t* tree, SOCKET socket) { + tree_node_t* tree_node = tree_find(tree, socket); + if (tree_node == NULL) + return NULL; + + return container_of(tree, ep_sock_t, tree_node); +} + void ep_sock_register_poll_req(ep_port_t* port_info, ep_sock_t* sock_info) { _ep_sock_private_t* sock_private = _ep_sock_private(sock_info); @@ -302,8 +310,3 @@ int ep_sock_feed_event(ep_port_t* port_info, return ev_count; } - -ep_sock_t* ep_sock_from_tree_node(tree_node_t* tree_node) { - assert(tree_node != NULL); - return container_of(tree_node, ep_sock_t, tree_node); -} diff --git a/src/epoll-socket.h b/src/epoll-socket.h index 42ad926..41bea98 100644 --- a/src/epoll-socket.h +++ b/src/epoll-socket.h @@ -21,6 +21,7 @@ typedef struct ep_sock { EPOLL_INTERNAL ep_sock_t* ep_sock_new(ep_port_t* port_info); EPOLL_INTERNAL int ep_sock_delete(ep_port_t* port_info, ep_sock_t* sock_info); +EPOLL_INTERNAL ep_sock_t* ep_sock_find(tree_t* tree, SOCKET socket); EPOLL_INTERNAL int ep_sock_set_socket(ep_port_t* port_info, ep_sock_t* sock_info, @@ -39,6 +40,4 @@ EPOLL_INTERNAL void ep_sock_register_poll_req(ep_port_t* port_info, EPOLL_INTERNAL void ep_sock_unregister_poll_req(ep_port_t* port_info, ep_sock_t* sock_info); -EPOLL_INTERNAL ep_sock_t* ep_sock_from_tree_node(tree_node_t* tree_node); - #endif /* EPOLL_SOCK_DATA_H_ */ diff --git a/src/epoll.c b/src/epoll.c index 6230654..3498583 100644 --- a/src/epoll.c +++ b/src/epoll.c @@ -49,15 +49,10 @@ static int _ep_ctl_add(ep_port_t* port_info, static int _ep_ctl_mod(ep_port_t* port_info, uintptr_t socket, struct epoll_event* ev) { - tree_node_t* tree_node; - ep_sock_t* sock_info; - - tree_node = tree_find(&port_info->sock_tree, socket); - if (tree_node == NULL) + ep_sock_t* sock_info = ep_sock_find(&port_info->sock_tree, socket); + if (sock_info == NULL) return -1; - sock_info = ep_sock_from_tree_node(tree_node); - if (ep_sock_set_event(port_info, sock_info, ev) < 0) return -1; @@ -65,15 +60,10 @@ static int _ep_ctl_mod(ep_port_t* port_info, } static int _ep_ctl_del(ep_port_t* port_info, uintptr_t socket) { - tree_node_t* tree_node; - ep_sock_t* sock_info; - - tree_node = tree_find(&port_info->sock_tree, socket); - if (tree_node == NULL) + ep_sock_t* sock_info = ep_sock_find(&port_info->sock_tree, socket); + if (sock_info == NULL) return -1; - sock_info = ep_sock_from_tree_node(tree_node); - if (ep_sock_delete(port_info, sock_info) < 0) return -1; @@ -282,7 +272,7 @@ int epoll_close(epoll_t port_handle) { /* Remove all entries from the socket_state tree. */ while ((tree_node = tree_root(&port_info->sock_tree)) != NULL) { - ep_sock_t* sock_info = ep_sock_from_tree_node(tree_node); + ep_sock_t* sock_info = container_of(tree_node, ep_sock_t, tree_node); ep_sock_delete(port_info, sock_info); }