]> PatchyGit - patchyircd.git/commitdiff
netpoll: flatten add_impl/del_impl
authorEgor <egor@patchysicp.xyz>
Thu, 5 Jun 2025 15:01:10 +0000 (18:01 +0300)
committerEgor <egor@patchysicp.xyz>
Thu, 5 Jun 2025 15:01:10 +0000 (18:01 +0300)
src/netpoll.cpp

index 40bdb71..b7e00f7 100644 (file)
@@ -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--;
 }