]> PatchyGit - patchyircd.git/commitdiff
netpoll: use UV_READABLE constants directly
authorEgor <egor@patchysicp.xyz>
Thu, 5 Jun 2025 14:57:57 +0000 (17:57 +0300)
committerEgor <egor@patchysicp.xyz>
Thu, 5 Jun 2025 14:58:32 +0000 (17:58 +0300)
src/main.cpp
src/net.cpp
src/netpoll.cpp
src/netpoll.h

index bc558a6..c316fe5 100644 (file)
@@ -308,7 +308,7 @@ int main(int argc, char *argv[])
        for (int i = 0; i < listener_count; i++) {
                net_nonblock(listeners[i].sock);
                netpoll::add(listeners[i].sock, SOCKTYPE_LISTENER, &listeners[i]);
-               netpoll::reg(listeners[i].sock, NETPOLL_IN);
+               netpoll::reg(listeners[i].sock, UV_READABLE);
        }
 
        FILE *f = fopen(getdatafile("init.txt"), "rb" FOPEN_CLOEXEC);
@@ -397,13 +397,13 @@ int main(int argc, char *argv[])
                while ((ev = netpoll::get(&pfd))) {
                        switch (pfd.type) {
                        case SOCKTYPE_LISTENER:
-                               if (ev & NETPOLL_IN)
+                               if (ev & UV_READABLE)
                                        accept_from_sock((struct listener *)pfd.assoc);
                                break;
                        case SOCKTYPE_CLIENT: {
                                struct client_data *cl = (struct client_data *)pfd.assoc;
-                               int isr = ev & NETPOLL_IN;
-                               int isw = ev & NETPOLL_OUT;
+                               int isr = ev & UV_READABLE;
+                               int isw = ev & UV_WRITABLE;
                                /* NOTE: recvProc can kill the client, so writing should be done first. */
                                if ((cl->want_read_for_write && isr) || (cl->want_write_for_write && isw))
                                        sendClient(cl, 0, 0);
@@ -413,8 +413,8 @@ int main(int argc, char *argv[])
                        }
                        case SOCKTYPE_DYING: {
                                struct client_data *cl = (struct client_data *)pfd.assoc;
-                               int isr = ev & NETPOLL_IN;
-                               int isw = ev & NETPOLL_OUT;
+                               int isr = ev & UV_READABLE;
+                               int isw = ev & UV_WRITABLE;
                                if (cl->wbufLen)
                                        if ((cl->want_read_for_write && isr) || (cl->want_write_for_write && isw))
                                                sendClient(cl, 0, 0);
index 749a1c5..e9b6177 100644 (file)
@@ -22,14 +22,14 @@ void update_poll_reg(struct client_data *cl)
         */
        if (!cl->dying) {
                if (!cl->want_write_for_read || cl->want_read_for_write)
-                       nreg |= NETPOLL_IN;
+                       nreg |= UV_READABLE;
                if (cl->want_write_for_read || cl->want_write_for_write)
-                       nreg |= NETPOLL_OUT;
+                       nreg |= UV_WRITABLE;
        } else {
                if (cl->want_read_for_write || cl->want_read_for_close)
-                       nreg |= NETPOLL_IN;
+                       nreg |= UV_READABLE;
                if (cl->want_write_for_write || cl->want_write_for_close)
-                       nreg |= NETPOLL_OUT;
+                       nreg |= UV_WRITABLE;
        }
        if (nreg != cl->poll_reg) {
                netpoll::reg(cl->FD, nreg);
index c12b4a7..40bdb71 100644 (file)
@@ -3,7 +3,6 @@
 #include "netpoll.h"
 #include "util.h"
 
-#include <uv.h>
 #include <algorithm>
 
 namespace netpoll {
@@ -90,15 +89,6 @@ static void cb(uv_poll_t *handle, int status, int events)
        }
        lastptr = 0;
 }
-static void reg_impl(int i, int ev)
-{
-       int events = 0;
-       if (ev & NETPOLL_IN)
-               events |= UV_READABLE;
-       if (ev & NETPOLL_OUT)
-               events |= UV_WRITABLE;
-       uvpoll[i]->events = events;
-}
 void begin(void)
 {
        for (int i = 0; i < nfds; i++) {
@@ -117,11 +107,7 @@ int get(struct net_pollfd *out)
        while (!ev) {
                if (lastptr == nfds)
                        return 0;
-               int pev = uvpoll[lastptr]->revents;
-               if (pev & UV_READABLE)
-                       ev |= NETPOLL_IN;
-               if (pev & UV_WRITABLE)
-                       ev |= NETPOLL_OUT;
+               ev = uvpoll[lastptr]->revents & (UV_READABLE | UV_WRITABLE);
                lastptr++;
        }
        *out = fds[lastptr-1];
@@ -156,14 +142,14 @@ void add(SOCKET fd, int type, void *assoc)
 void del_and_close(SOCKET fd)
 {
        int i = search(fd, false);
-       reg_impl(i, 0);
+       uvpoll[i]->events = 0;
        del_impl(i);
        memmove(fds+i, fds+i+1, sizeof(fds[0])*(nfds-(i+1)));
        nfds--;
 }
 void reg(SOCKET fd, int ev)
 {
-       reg_impl(search(fd, false), ev);
+       uvpoll[search(fd, false)]->events = ev & (UV_READABLE | UV_WRITABLE);
 }
 void change_type(SOCKET fd, int type)
 {
index ecdf8f2..6f72823 100644 (file)
@@ -3,6 +3,7 @@
 #ifndef NETPOLL_H_
 #define NETPOLL_H_
 #include "netsock.h"
+#include <uv.h>
 namespace netpoll {
 struct net_pollfd {
        void *assoc;
@@ -18,8 +19,6 @@ void change_type(SOCKET fd, int type);
 void begin(void);
 int get(struct net_pollfd *out);
 }
-#define NETPOLL_IN 1
-#define NETPOLL_OUT 2
 
 #define SOCKTYPE_LISTENER 0
 #define SOCKTYPE_SELFPIPE 1