From: Niels Provos Date: Sat, 8 Mar 2003 16:33:18 +0000 (+0000) Subject: fix kqueue problem X-Git-Tag: release-1.1b~119 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0036d79ab6d7663618c76ca49ca5173b2ab4424a;p=libevent fix kqueue problem svn:r50 --- diff --git a/Makefile.am b/Makefile.am index 98bbc7be..fe756916 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,5 +1,6 @@ AUTOMAKE_OPTIONS = foreign no-dependencies +CFLAGS += -Wall -g -O2 SUBDIRS = . sample test EXTRA_DIST = acconfig.h evsignal.h \ diff --git a/configure.in b/configure.in index 775d298c..f085ae3b 100644 --- a/configure.in +++ b/configure.in @@ -21,7 +21,7 @@ AC_CHECK_LIB(socket, socket) dnl Checks for header files. AC_HEADER_STDC -AC_CHECK_HEADERS(poll.h signal.h unistd.h sys/epoll.h sys/time.h sys/queue.h sys/event.h) +AC_CHECK_HEADERS(inttypes.h stdint.h poll.h signal.h unistd.h sys/epoll.h sys/time.h sys/queue.h sys/event.h) if test "x$ac_cv_header_sys_queue_h" = "xyes"; then AC_MSG_CHECKING(for TAILQ_FOREACH in sys/queue.h) AC_EGREP_CPP(yes, diff --git a/kqueue.c b/kqueue.c index 9894064f..9e48b704 100644 --- a/kqueue.c +++ b/kqueue.c @@ -48,6 +48,9 @@ #include #include #include +#ifdef HAVE_INTTYPES_H +#include +#endif #ifdef USE_LOG #include "log.h" @@ -56,6 +59,12 @@ #define log_error warn #endif +#ifdef HAVE_INTTYPES_H +#define INTPTR(x) (intptr_t)x +#else +#define INTPTR(x) x +#endif + #include "event.h" extern struct event_list timequeue; @@ -234,39 +243,18 @@ kq_dispatch(void *arg, struct timeval *tv) which |= EV_WRITE; } else if (events[i].filter == EVFILT_SIGNAL) { which |= EV_SIGNAL; - } else - events[i].filter = 0; + } if (!which) continue; + if (!(ev->ev_events & EV_PERSIST)) + event_del(ev); + event_active(ev, which, ev->ev_events & EV_SIGNAL ? events[i].data : 1); } - for (i = 0; i < res; i++) { - /* XXX */ - int ncalls, evres; - - if (events[i].flags & EV_ERROR || events[i].filter == NULL) - continue; - - ev = (struct event *)events[i].udata; - if (ev->ev_events & EV_PERSIST) - continue; - - ncalls = 0; - if (ev->ev_flags & EVLIST_ACTIVE) { - ncalls = ev->ev_ncalls; - evres = ev->ev_res; - } - ev->ev_flags &= ~EVLIST_X_KQINKERNEL; - event_del(ev); - - if (ncalls) - event_active(ev, evres, ncalls); - } - return (0); } @@ -286,7 +274,7 @@ kq_add(void *arg, struct event *ev) kev.flags = EV_ADD; if (!(ev->ev_events & EV_PERSIST)) kev.flags |= EV_ONESHOT; - kev.udata = ev; + kev.udata = INTPTR(ev); if (kq_insert(kqop, &kev) == -1) return (-1); @@ -305,7 +293,7 @@ kq_add(void *arg, struct event *ev) kev.flags = EV_ADD; if (!(ev->ev_events & EV_PERSIST)) kev.flags |= EV_ONESHOT; - kev.udata = ev; + kev.udata = INTPTR(ev); if (kq_insert(kqop, &kev) == -1) return (-1); @@ -320,7 +308,7 @@ kq_add(void *arg, struct event *ev) kev.flags = EV_ADD; if (!(ev->ev_events & EV_PERSIST)) kev.flags |= EV_ONESHOT; - kev.udata = ev; + kev.udata = INTPTR(ev); if (kq_insert(kqop, &kev) == -1) return (-1);