From 6a8df07590227de8701d54f20f2331a9ba5030d1 Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@openwrt.org>
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 <nbd@openwrt.org>
---
 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