From 6a8df07590227de8701d54f20f2331a9ba5030d1 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Fri, 4 Jan 2013 01:15:45 +0100 Subject: [PATCH] uloop: do less state/change tracking for kevent() on mac os x, it is unreliable Signed-off-by: Felix Fietkau --- uloop.c | 19 +++++-------------- uloop.h | 3 --- 2 files changed, 5 insertions(+), 17 deletions(-) diff --git a/uloop.c b/uloop.c index f4f5e02..2de94f5 100644 --- a/uloop.c +++ b/uloop.c @@ -88,23 +88,15 @@ static int register_poll(struct uloop_fd *fd, unsigned int flags) { struct timespec timeout = { 0, 0 }; struct kevent ev[2]; - unsigned int changed; int nev = 0; unsigned int fl = 0; + uint16_t kflags; - changed = fd->kqflags ^ flags; - if (changed & ULOOP_EDGE_TRIGGER) - changed |= flags; + kflags = get_flags(flags, ULOOP_READ); + EV_SET(&ev[nev++], fd->fd, EVFILT_READ, kflags, 0, 0, fd); - if (changed & ULOOP_READ) { - uint16_t kflags = get_flags(flags, ULOOP_READ); - EV_SET(&ev[nev++], fd->fd, EVFILT_READ, kflags, 0, 0, fd); - } - - if (changed & ULOOP_WRITE) { - uint16_t kflags = get_flags(flags, ULOOP_WRITE); - EV_SET(&ev[nev++], fd->fd, EVFILT_WRITE, kflags, 0, 0, fd); - } + kflags = get_flags(flags, ULOOP_WRITE); + EV_SET(&ev[nev++], fd->fd, EVFILT_WRITE, kflags, 0, 0, fd); if (!flags) fl |= EV_DELETE; @@ -112,7 +104,6 @@ static int register_poll(struct uloop_fd *fd, unsigned int flags) if (nev && (kevent(poll_fd, ev, nev, NULL, fl, &timeout) == -1)) return -1; - fd->kqflags = flags; return 0; } diff --git a/uloop.h b/uloop.h index 05007fa..4be2913 100644 --- a/uloop.h +++ b/uloop.h @@ -54,9 +54,6 @@ struct uloop_fd bool eof; bool error; bool registered; -#ifdef USE_KQUEUE - uint8_t kqflags; -#endif }; struct uloop_timeout -- 2.11.0