++kqueue_changecnt;
array_needsize (struct kevent, kqueue_changes, kqueue_changemax, kqueue_changecnt, EMPTY2);
- ke = &kqueue_changes [kqueue_changecnt - 1];
- memset (ke, 0, sizeof (struct kevent));
- ke->ident = fd;
- ke->filter = filter;
- ke->flags = flags;
- ke->fflags = fflags;
+ EV_SET (&kqueue_changes [kqueue_changecnt - 1], fd, filter, flags, fflags, 0, 0);
}
#ifndef NOTE_EOF
static void
kqueue_modify (EV_P_ int fd, int oev, int nev)
{
- /* to detect close/reopen reliably, we have to remove and re-add */
- /* event requests even when oev == nev */
+ if (oev != nev)
+ {
+ if (oev & EV_READ)
+ kqueue_change (EV_A_ fd, EVFILT_READ , EV_DELETE, 0);
- if (oev & EV_READ)
- kqueue_change (EV_A_ fd, EVFILT_READ, EV_DELETE, 0);
+ if (oev & EV_WRITE)
+ kqueue_change (EV_A_ fd, EVFILT_WRITE, EV_DELETE, 0);
+ }
- if (oev & EV_WRITE)
- kqueue_change (EV_A_ fd, EVFILT_WRITE, EV_DELETE, 0);
+ /* to detect close/reopen reliably, we have to re-add */
+ /* event requests even when oev == nev */
if (nev & EV_READ)
- kqueue_change (EV_A_ fd, EVFILT_READ, EV_ADD, NOTE_EOF);
+ kqueue_change (EV_A_ fd, EVFILT_READ , EV_ADD, NOTE_EOF);
if (nev & EV_WRITE)
kqueue_change (EV_A_ fd, EVFILT_WRITE, EV_ADD, NOTE_EOF);
ts.tv_sec = (time_t)timeout;
ts.tv_nsec = (long)((timeout - (ev_tstamp)ts.tv_sec) * 1e9);
- fprintf (stderr, "to %ld:%09ld %f\n", ts.tv_sec, ts.tv_nsec, res);//D
res = kevent (kqueue_fd, kqueue_changes, kqueue_changecnt, kqueue_events, kqueue_eventmax, &ts);
kqueue_changecnt = 0;
return 0;
}
- method_fudge = 1e-3; /* needed to compensate for kevent returning early */
- method_modify = kqueue_modify;
- method_poll = kqueue_poll;
+ backend_fudge = 1e-3; /* needed to compensate for kevent returning early */
+ backend_modify = kqueue_modify;
+ backend_poll = kqueue_poll;
kqueue_eventmax = 64; /* intiial number of events receivable per poll */
kqueue_events = (struct kevent *)ev_malloc (sizeof (struct kevent) * kqueue_eventmax);
kqueue_changemax = 0;
kqueue_changecnt = 0;
- return EVMETHOD_KQUEUE;
+ return EVBACKEND_KQUEUE;
}
static void