port: do not track poll request count
This commit is contained in:
parent
ee6a1e300a
commit
0bd24cc1e5
@ -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. */
|
||||
|
||||
@ -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_ */
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user