From 1b6d5b39c5a83458f721fc977aea534935ed4ac5 Mon Sep 17 00:00:00 2001 From: Egor Date: Thu, 5 Jun 2025 18:01:10 +0300 Subject: [PATCH] netpoll: flatten add_impl/del_impl --- src/netpoll.cpp | 46 +++++++++++++++++++--------------------------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/src/netpoll.cpp b/src/netpoll.cpp index 40bdb71..b7e00f7 100644 --- a/src/netpoll.cpp +++ b/src/netpoll.cpp @@ -50,31 +50,6 @@ void fini(void) uv_print_all_handles(uvloop, stderr); uv_library_shutdown(); } -static void add_impl(int i) -{ - struct polldata *poll = uvalloc::get(); - memmove(uvpoll+i+1, uvpoll+i, sizeof(uvpoll[0])*(nfds-1-i)); - uvpoll[i] = poll; - poll->events = 0; - poll->revents = 0; - poll->fd = fds[i].fd; - poll->dead = 0; - uv_poll_init_socket(uvloop, &poll->uv, fds[i].fd); - if (lastptr >= i) - lastptr++; -} -static void del_impl(int i) -{ - struct polldata *poll = uvpoll[i]; - memmove(uvpoll+i, uvpoll+i+1, sizeof(uvpoll[0])*(nfds-(i+1))); - uv_close((uv_handle_t *)&poll->uv, [](uv_handle_t *handle){ - struct polldata *p = container_of(handle, struct polldata, uv); - closesocket(p->fd); - uvalloc::put(p); - }); - if (lastptr > i) - lastptr--; -} static void cb(uv_poll_t *handle, int status, int events) { struct polldata *poll = container_of(handle, struct polldata, uv); @@ -137,13 +112,30 @@ void add(SOCKET fd, int type, void *assoc) int i = search(fd, true); fds[i].assoc = assoc; fds[i].type = type; - add_impl(i); + struct polldata *poll = uvalloc::get(); + memmove(uvpoll+i+1, uvpoll+i, sizeof(uvpoll[0])*(nfds-1-i)); + uvpoll[i] = poll; + poll->events = 0; + poll->revents = 0; + poll->fd = fds[i].fd; + poll->dead = 0; + uv_poll_init_socket(uvloop, &poll->uv, fds[i].fd); + if (lastptr >= i) + lastptr++; } void del_and_close(SOCKET fd) { int i = search(fd, false); uvpoll[i]->events = 0; - del_impl(i); + struct polldata *poll = uvpoll[i]; + memmove(uvpoll+i, uvpoll+i+1, sizeof(uvpoll[0])*(nfds-(i+1))); + uv_close((uv_handle_t *)&poll->uv, [](uv_handle_t *handle){ + struct polldata *p = container_of(handle, struct polldata, uv); + closesocket(p->fd); + uvalloc::put(p); + }); + if (lastptr > i) + lastptr--; memmove(fds+i, fds+i+1, sizeof(fds[0])*(nfds-(i+1))); nfds--; } -- 2.56.0