]> git.llucax.com Git - software/libev.git/blobdiff - ev.c
*** empty log message ***
[software/libev.git] / ev.c
diff --git a/ev.c b/ev.c
index 9686364d52d5945306a2855720d6894241c0672e..83c643a988c6585d8af32123f41827c6acdd767d 100644 (file)
--- a/ev.c
+++ b/ev.c
  */
 #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 <math.h>
@@ -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;
@@ -709,7 +735,9 @@ ev_default_loop (int methods)
 void
 ev_default_destroy (void)
 {
+#if EV_MULTIPLICITY
   struct ev_loop *loop = default_loop;
+#endif
 
   ev_ref (EV_A); /* child watcher */
   ev_signal_stop (EV_A_ &childev);
@@ -724,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);
@@ -764,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)
         {
@@ -785,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)
         {