X-Git-Url: https://git.llucax.com/software/libev.git/blobdiff_plain/305af5e87583383e4059c39dfa146621c5ec8be9..c04c7d0577ceddfe470b6fdcaf727ced91a67d1a:/ev.c?ds=sidebyside diff --git a/ev.c b/ev.c index 790baee..83c643a 100644 --- a/ev.c +++ b/ev.c @@ -30,6 +30,28 @@ */ #ifndef EV_STANDALONE # include "config.h" + +# if HAVE_CLOCK_GETTIME +# define EV_USE_MONOTONIC 1 +# define EV_USE_REALTIME 1 +# endif + +# if HAVE_SELECT && HAVE_SYS_SELECT_H +# define EV_USE_SELECT 1 +# endif + +# if HAVE_POLL && HAVE_POLL_H +# define EV_USE_POLL 1 +# endif + +# if HAVE_EPOLL && HAVE_EPOLL_CTL && HAVE_SYS_EPOLL_H +# define EV_USE_EPOLL 1 +# endif + +# if HAVE_KQUEUE && HAVE_WORKING_KQUEUE && HAVE_SYS_EVENT_H && HAVE_SYS_QUEUE_H +# define EV_USE_KQUEUE 1 +# endif + #endif #include @@ -60,8 +82,8 @@ # define EV_USE_SELECT 1 #endif -#ifndef EV_USEV_POLL -# define EV_USEV_POLL 0 /* poll is usually slower than select, and not as well tested */ +#ifndef EV_USE_POLL +# define EV_USE_POLL 0 /* poll is usually slower than select, and not as well tested */ #endif #ifndef EV_USE_EPOLL @@ -351,7 +373,7 @@ fd_rearm_all (EV_P) if (anfds [fd].events) { anfds [fd].events = 0; - fd_change (fd); + fd_change (EV_A_ fd); } } @@ -411,6 +433,7 @@ static int signalmax; static int sigpipe [2]; static sig_atomic_t volatile gotsig; +static struct ev_io sigev; static void signals_init (ANSIG *base, int count) @@ -478,6 +501,9 @@ siginit (EV_P) #ifndef WIN32 +static struct ev_child *childs [PID_HASHSIZE]; +static struct ev_signal childev; + #ifndef WCONTINUED # define WCONTINUED 0 #endif @@ -522,7 +548,7 @@ childcb (EV_P_ struct ev_signal *sw, int revents) #if EV_USE_EPOLL # include "ev_epoll.c" #endif -#if EV_USEV_POLL +#if EV_USE_POLL # include "ev_poll.c" #endif #if EV_USE_SELECT @@ -590,7 +616,7 @@ loop_init (EV_P_ int methods) #if EV_USE_EPOLL if (!method && (methods & EVMETHOD_EPOLL )) method = epoll_init (EV_A_ methods); #endif -#if EV_USEV_POLL +#if EV_USE_POLL if (!method && (methods & EVMETHOD_POLL )) method = poll_init (EV_A_ methods); #endif #if EV_USE_SELECT @@ -608,7 +634,7 @@ loop_destroy (EV_P) #if EV_USE_EPOLL if (method == EVMETHOD_EPOLL ) epoll_destroy (EV_A); #endif -#if EV_USEV_POLL +#if EV_USE_POLL if (method == EVMETHOD_POLL ) poll_destroy (EV_A); #endif #if EV_USE_SELECT @@ -639,7 +665,7 @@ ev_loop_new (int methods) loop_init (EV_A_ methods); - if (ev_methods (EV_A)) + if (ev_method (EV_A)) return loop; return 0; @@ -726,8 +752,12 @@ ev_default_destroy (void) } void -ev_default_fork (EV_P) +ev_default_fork (void) { +#if EV_MULTIPLICITY + struct ev_loop *loop = default_loop; +#endif + loop_fork (EV_A); ev_io_stop (EV_A_ &sigev); @@ -766,6 +796,8 @@ timers_reify (EV_P) { struct ev_timer *w = timers [0]; + assert (("inactive timer on timer heap detected", ev_is_active (w))); + /* first reschedule or stop timer */ if (w->repeat) { @@ -787,6 +819,8 @@ periodics_reify (EV_P) { struct ev_periodic *w = periodics [0]; + assert (("inactive timer on periodic heap detected", ev_is_active (w))); + /* first reschedule or stop timer */ if (w->interval) {