mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-14 06:49:35 -04:00
fix kqueue problem
svn:r50
This commit is contained in:
parent
33b1c6c474
commit
0036d79ab6
@ -1,5 +1,6 @@
|
|||||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||||
|
|
||||||
|
CFLAGS += -Wall -g -O2
|
||||||
SUBDIRS = . sample test
|
SUBDIRS = . sample test
|
||||||
|
|
||||||
EXTRA_DIST = acconfig.h evsignal.h \
|
EXTRA_DIST = acconfig.h evsignal.h \
|
||||||
|
@ -21,7 +21,7 @@ AC_CHECK_LIB(socket, socket)
|
|||||||
|
|
||||||
dnl Checks for header files.
|
dnl Checks for header files.
|
||||||
AC_HEADER_STDC
|
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
|
if test "x$ac_cv_header_sys_queue_h" = "xyes"; then
|
||||||
AC_MSG_CHECKING(for TAILQ_FOREACH in sys/queue.h)
|
AC_MSG_CHECKING(for TAILQ_FOREACH in sys/queue.h)
|
||||||
AC_EGREP_CPP(yes,
|
AC_EGREP_CPP(yes,
|
||||||
|
44
kqueue.c
44
kqueue.c
@ -48,6 +48,9 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <err.h>
|
#include <err.h>
|
||||||
|
#ifdef HAVE_INTTYPES_H
|
||||||
|
#include <inttypes.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef USE_LOG
|
#ifdef USE_LOG
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
@ -56,6 +59,12 @@
|
|||||||
#define log_error warn
|
#define log_error warn
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_INTTYPES_H
|
||||||
|
#define INTPTR(x) (intptr_t)x
|
||||||
|
#else
|
||||||
|
#define INTPTR(x) x
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
|
|
||||||
extern struct event_list timequeue;
|
extern struct event_list timequeue;
|
||||||
@ -234,39 +243,18 @@ kq_dispatch(void *arg, struct timeval *tv)
|
|||||||
which |= EV_WRITE;
|
which |= EV_WRITE;
|
||||||
} else if (events[i].filter == EVFILT_SIGNAL) {
|
} else if (events[i].filter == EVFILT_SIGNAL) {
|
||||||
which |= EV_SIGNAL;
|
which |= EV_SIGNAL;
|
||||||
} else
|
}
|
||||||
events[i].filter = 0;
|
|
||||||
|
|
||||||
if (!which)
|
if (!which)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (!(ev->ev_events & EV_PERSIST))
|
||||||
|
event_del(ev);
|
||||||
|
|
||||||
event_active(ev, which,
|
event_active(ev, which,
|
||||||
ev->ev_events & EV_SIGNAL ? events[i].data : 1);
|
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);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -286,7 +274,7 @@ kq_add(void *arg, struct event *ev)
|
|||||||
kev.flags = EV_ADD;
|
kev.flags = EV_ADD;
|
||||||
if (!(ev->ev_events & EV_PERSIST))
|
if (!(ev->ev_events & EV_PERSIST))
|
||||||
kev.flags |= EV_ONESHOT;
|
kev.flags |= EV_ONESHOT;
|
||||||
kev.udata = ev;
|
kev.udata = INTPTR(ev);
|
||||||
|
|
||||||
if (kq_insert(kqop, &kev) == -1)
|
if (kq_insert(kqop, &kev) == -1)
|
||||||
return (-1);
|
return (-1);
|
||||||
@ -305,7 +293,7 @@ kq_add(void *arg, struct event *ev)
|
|||||||
kev.flags = EV_ADD;
|
kev.flags = EV_ADD;
|
||||||
if (!(ev->ev_events & EV_PERSIST))
|
if (!(ev->ev_events & EV_PERSIST))
|
||||||
kev.flags |= EV_ONESHOT;
|
kev.flags |= EV_ONESHOT;
|
||||||
kev.udata = ev;
|
kev.udata = INTPTR(ev);
|
||||||
|
|
||||||
if (kq_insert(kqop, &kev) == -1)
|
if (kq_insert(kqop, &kev) == -1)
|
||||||
return (-1);
|
return (-1);
|
||||||
@ -320,7 +308,7 @@ kq_add(void *arg, struct event *ev)
|
|||||||
kev.flags = EV_ADD;
|
kev.flags = EV_ADD;
|
||||||
if (!(ev->ev_events & EV_PERSIST))
|
if (!(ev->ev_events & EV_PERSIST))
|
||||||
kev.flags |= EV_ONESHOT;
|
kev.flags |= EV_ONESHOT;
|
||||||
kev.udata = ev;
|
kev.udata = INTPTR(ev);
|
||||||
|
|
||||||
if (kq_insert(kqop, &kev) == -1)
|
if (kq_insert(kqop, &kev) == -1)
|
||||||
return (-1);
|
return (-1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user