socket: refactor lookup logic

This commit is contained in:
Bert Belder 2017-09-11 03:04:11 +02:00
parent d90f0d2d71
commit eff08efcb8
3 changed files with 14 additions and 22 deletions

View File

@ -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);
}

View File

@ -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_ */

View File

@ -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);
}