[MEDIUM] kqueue: do not manually remove fds
FDs attached to a kevent are automatically removed after close().
Also, do not mark the FDs as EV_CLEAR. We want to stay informed
about readiness.
diff --git a/src/ev_kqueue.c b/src/ev_kqueue.c
index 4f9d684..3958343 100644
--- a/src/ev_kqueue.c
+++ b/src/ev_kqueue.c
@@ -65,7 +65,7 @@
return 0;
FD_SET(fd, fd_evts[dir]);
- EV_SET(kev, fd, dir2filt[dir], EV_ADD|EV_CLEAR, 0, 0, NULL);
+ EV_SET(kev, fd, dir2filt[dir], EV_ADD, 0, 0, NULL);
kevent(kqueue_fd, kev, 1, NULL, 0, NULL);
return 1;
}
@@ -89,6 +89,12 @@
kevent(kqueue_fd, kev, changes, NULL, 0, NULL);
}
+REGPRM1 static void __fd_clo(int fd)
+{
+ FD_CLR(fd, fd_evts[DIR_RD]);
+ FD_CLR(fd, fd_evts[DIR_WR]);
+}
+
/*
* kqueue() poller
*/