uloop: reset flags after __uloop_fd_delete call
authorFelix Fietkau <nbd@nbd.name>
Mon, 27 Nov 2023 13:59:06 +0000 (14:59 +0100)
committerFelix Fietkau <nbd@nbd.name>
Mon, 27 Nov 2023 17:30:01 +0000 (18:30 +0100)
Fixes fd delete with kqueue, which relies on the previous flags value

Signed-off-by: Felix Fietkau <nbd@nbd.name>
uloop.c

diff --git a/uloop.c b/uloop.c
index ebd78398fe1f054e0376dab833cea07ef14d336a..da6f690cfad63f100f38510d087e81350cc1ea2b 100644 (file)
--- a/uloop.c
+++ b/uloop.c
@@ -264,6 +264,7 @@ out:
 
 int uloop_fd_delete(struct uloop_fd *fd)
 {
+       int ret;
        int i;
 
        for (i = 0; i < cur_nfds; i++) {
@@ -280,9 +281,11 @@ int uloop_fd_delete(struct uloop_fd *fd)
                uloop_fd_set_cb(fd, 0);
 
        fd->registered = false;
-       fd->flags = 0;
        uloop_fd_stack_event(fd, -1);
-       return __uloop_fd_delete(fd);
+       ret = __uloop_fd_delete(fd);
+       fd->flags = 0;
+
+       return ret;
 }
 
 static int64_t tv_diff(struct timeval *t1, struct timeval *t2)