X-Git-Url: https://git.llucax.com/software/libev.git/blobdiff_plain/e7e7177a1b3a13f8534fca81c48c4d063fddbbd3..d633d5d43a40d850ccbc3f4b701769a644e7762b:/ev_kqueue.c diff --git a/ev_kqueue.c b/ev_kqueue.c index 7a34e9b..133f33c 100644 --- a/ev_kqueue.c +++ b/ev_kqueue.c @@ -36,11 +36,9 @@ #include #include -static void +void inline_speed kqueue_change (EV_P_ int fd, int filter, int flags, int fflags) { - struct kevent *ke; - ++kqueue_changecnt; array_needsize (struct kevent, kqueue_changes, kqueue_changemax, kqueue_changecnt, EMPTY2); @@ -83,7 +81,7 @@ kqueue_poll (EV_P_ ev_tstamp timeout) if (kqueue_changecnt > kqueue_eventmax) { ev_free (kqueue_events); - kqueue_eventmax = array_roundsize (struct kevent, kqueue_changecnt); + kqueue_eventmax = array_nextsize (sizeof (struct kevent), kqueue_eventmax, kqueue_changecnt); kqueue_events = (struct kevent *)ev_malloc (sizeof (struct kevent) * kqueue_eventmax); } @@ -92,7 +90,7 @@ kqueue_poll (EV_P_ ev_tstamp timeout) res = kevent (backend_fd, kqueue_changes, kqueue_changecnt, kqueue_events, kqueue_eventmax, &ts); kqueue_changecnt = 0; - if (res < 0) + if (expect_false (res < 0)) { if (errno != EINTR) syserr ("(libev) kevent"); @@ -137,24 +135,21 @@ kqueue_poll (EV_P_ ev_tstamp timeout) if (expect_false (res == kqueue_eventmax)) { ev_free (kqueue_events); - kqueue_eventmax = array_roundsize (struct kevent, kqueue_eventmax << 1); + kqueue_eventmax = array_nextsize (sizeof (struct kevent), kqueue_eventmax, kqueue_eventmax + 1); kqueue_events = (struct kevent *)ev_malloc (sizeof (struct kevent) * kqueue_eventmax); } } -static int +int inline_size kqueue_init (EV_P_ int flags) { - struct kevent ch, ev; - /* Initalize the kernel queue */ if ((backend_fd = kqueue ()) < 0) return 0; fcntl (backend_fd, F_SETFD, FD_CLOEXEC); /* not sure if necessary, hopefully doesn't hurt */ - /* fudge *might* be zero from the documentation, but bsd docs are notoriously wrong */ - backend_fudge = 1e-3; /* needed to compensate for kevent returning early */ + backend_fudge = 0.; backend_modify = kqueue_modify; backend_poll = kqueue_poll; @@ -168,16 +163,14 @@ kqueue_init (EV_P_ int flags) return EVBACKEND_KQUEUE; } -static void +void inline_size kqueue_destroy (EV_P) { - close (backend_fd); - ev_free (kqueue_events); ev_free (kqueue_changes); } -static void +void inline_size kqueue_fork (EV_P) { close (backend_fd);