diff options
author | Felix Fietkau <nbd@openwrt.org> | 2013-01-04 04:15:45 +0400 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2013-01-04 04:15:48 +0400 |
commit | 6a8df07590227de8701d54f20f2331a9ba5030d1 (patch) | |
tree | 62a82cd1ba1d727c6a265b6d1d6cd57798f9d132 /uloop.c | |
parent | 8686989fffaf8041889edbe5319581bc0fa8c847 (diff) |
uloop: do less state/change tracking for kevent() on mac os x, it is unreliable
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Diffstat (limited to 'uloop.c')
-rw-r--r-- | uloop.c | 19 |
1 files changed, 5 insertions, 14 deletions
@@ -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; } |