uloop: add support for integrating with a different event loop
[project/libubox.git] / uloop-kqueue.c
index 0cb1c14ff64ad65732ffac080ef639b222285b30..c1275b05a781140a5388e0712b9aba4f1f6819ae 100644 (file)
@@ -15,7 +15,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
-int uloop_init(void)
+static int uloop_init_pollfd(void)
 {
        struct timespec timeout = { 0, 0 };
        struct kevent ev = {};
@@ -66,6 +66,9 @@ static int register_kevent(struct uloop_fd *fd, unsigned int flags)
        if (changed & ULOOP_EDGE_TRIGGER)
                changed |= flags;
 
+       if (!changed)
+               return 0;
+
        if (changed & ULOOP_READ) {
                kflags = get_flags(flags, ULOOP_READ);
                EV_SET(&ev[nev++], fd->fd, EVFILT_READ, kflags, 0, 0, fd);
@@ -79,7 +82,6 @@ static int register_kevent(struct uloop_fd *fd, unsigned int flags)
        if (!flags)
                fl |= EV_DELETE;
 
-       fd->flags = flags;
        if (kevent(poll_fd, ev, nev, NULL, fl, &timeout) == -1)
                return -1;