]> git.llucax.com Git - software/libev.git/blobdiff - ev.c
more thorough renaming, might even work now
[software/libev.git] / ev.c
diff --git a/ev.c b/ev.c
index 3903a6cd42ceb14b5fa0626ee4718a50192a82f4..08612aafa4c4696913d2c820375a78b9d64ce151 100644 (file)
--- a/ev.c
+++ b/ev.c
@@ -43,26 +43,53 @@ extern "C" {
 #  ifndef EV_USE_REALTIME
 #   define EV_USE_REALTIME  1
 #  endif
 #  ifndef EV_USE_REALTIME
 #   define EV_USE_REALTIME  1
 #  endif
+# else
+#  ifndef EV_USE_MONOTONIC
+#   define EV_USE_MONOTONIC 0
+#  endif
+#  ifndef EV_USE_REALTIME
+#   define EV_USE_REALTIME  0
+#  endif
 # endif
 
 # endif
 
-# if HAVE_SELECT && HAVE_SYS_SELECT_H && !defined (EV_USE_SELECT)
-#  define EV_USE_SELECT 1
+# ifndef EV_USE_SELECT
+#  if HAVE_SELECT && HAVE_SYS_SELECT_H
+#   define EV_USE_SELECT 1
+#  else
+#   define EV_USE_SELECT 0
+#  endif
 # endif
 
 # endif
 
-# if HAVE_POLL && HAVE_POLL_H && !defined (EV_USE_POLL)
-#  define EV_USE_POLL 1
+# ifndef EV_USE_POLL
+#  if HAVE_POLL && HAVE_POLL_H
+#   define EV_USE_POLL 1
+#  else
+#   define EV_USE_POLL 0
+#  endif
 # endif
 # endif
-
-# if HAVE_EPOLL_CTL && HAVE_SYS_EPOLL_H && !defined (EV_USE_EPOLL)
-#  define EV_USE_EPOLL 1
+   
+# ifndef EV_USE_EPOLL
+#  if HAVE_EPOLL_CTL && HAVE_SYS_EPOLL_H
+#   define EV_USE_EPOLL 1
+#  else
+#   define EV_USE_EPOLL 0
+#  endif
 # endif
 # endif
-
-# if HAVE_KQUEUE && HAVE_SYS_EVENT_H && HAVE_SYS_QUEUE_H && !defined (EV_USE_KQUEUE)
-#  define EV_USE_KQUEUE 1
+   
+# ifndef EV_USE_KQUEUE
+#  if HAVE_KQUEUE && HAVE_SYS_EVENT_H && HAVE_SYS_QUEUE_H
+#   define EV_USE_KQUEUE 1
+#  else
+#   define EV_USE_KQUEUE 0
+#  endif
 # endif
 # endif
-
-# if HAVE_PORT_H && HAVE_PORT_CREATE && !defined (EV_USE_PORT)
-#  define EV_USE_PORT 1
+   
+# ifndef EV_USE_PORT
+#  if HAVE_PORT_H && HAVE_PORT_CREATE
+#   define EV_USE_PORT 1
+#  else
+#   define EV_USE_PORT 0
+#  endif
 # endif
 
 #endif
 # endif
 
 #endif
@@ -129,12 +156,6 @@ extern "C" {
 
 /**/
 
 
 /**/
 
-/* darwin simply cannot be helped */
-#ifdef __APPLE__
-# undef EV_USE_POLL
-# undef EV_USE_KQUEUE
-#endif
-
 #ifndef CLOCK_MONOTONIC
 # undef EV_USE_MONOTONIC
 # define EV_USE_MONOTONIC 0
 #ifndef CLOCK_MONOTONIC
 # undef EV_USE_MONOTONIC
 # define EV_USE_MONOTONIC 0
@@ -439,7 +460,7 @@ fd_reify (EV_P)
 
       anfd->reify = 0;
 
 
       anfd->reify = 0;
 
-      method_modify (EV_A_ fd, anfd->events, events);
+      backend_modify (EV_A_ fd, anfd->events, events);
       anfd->events = events;
     }
 
       anfd->events = events;
     }
 
@@ -507,7 +528,7 @@ fd_enomem (EV_P)
       }
 }
 
       }
 }
 
-/* usually called after fork if method needs to re-arm all fds from scratch */
+/* usually called after fork if backend needs to re-arm all fds from scratch */
 static void
 fd_rearm_all (EV_P)
 {
 static void
 fd_rearm_all (EV_P)
 {
@@ -760,15 +781,47 @@ enable_secure (void)
 }
 
 unsigned int
 }
 
 unsigned int
-ev_method (EV_P)
+ev_supported_backends (void)
+{
+  unsigned int flags = 0;
+
+  if (EV_USE_PORT  ) flags |= EVBACKEND_PORT;
+  if (EV_USE_KQUEUE) flags |= EVBACKEND_KQUEUE;
+  if (EV_USE_EPOLL ) flags |= EVBACKEND_EPOLL;
+  if (EV_USE_POLL  ) flags |= EVBACKEND_POLL;
+  if (EV_USE_SELECT) flags |= EVBACKEND_SELECT;
+  
+  return flags;
+}
+
+unsigned int
+ev_recommended_backends (void)
+{
+  unsigned int flags = ev_recommended_backends ();
+
+#ifndef __NetBSD__
+  /* kqueue is borked on everything but netbsd apparently */
+  /* it usually doesn't work correctly on anything but sockets and pipes */
+  flags &= ~EVBACKEND_KQUEUE;
+#endif
+#ifdef __APPLE__
+  // flags &= ~EVBACKEND_KQUEUE; for documentation
+  flags &= ~EVBACKEND_POLL;
+#endif
+
+  return flags;
+}
+
+unsigned int
+ev_backend (EV_P)
 {
 {
-  return method;
+  return backend;
 }
 
 static void
 loop_init (EV_P_ unsigned int flags)
 {
 }
 
 static void
 loop_init (EV_P_ unsigned int flags)
 {
-  if (!method)
+  if (!backend)
     {
 #if EV_USE_MONOTONIC
       {
     {
 #if EV_USE_MONOTONIC
       {
@@ -783,27 +836,29 @@ loop_init (EV_P_ unsigned int flags)
       now_floor = mn_now;
       rtmn_diff = ev_rt_now - mn_now;
 
       now_floor = mn_now;
       rtmn_diff = ev_rt_now - mn_now;
 
-      if (!(flags & EVFLAG_NOENV) && !enable_secure () && getenv ("LIBEV_FLAGS"))
+      if (!(flags & EVFLAG_NOENV)
+          && !enable_secure ()
+          && getenv ("LIBEV_FLAGS"))
         flags = atoi (getenv ("LIBEV_FLAGS"));
 
         flags = atoi (getenv ("LIBEV_FLAGS"));
 
-      if (!(flags & 0x0000ffff))
-        flags |= 0x0000ffff;
+      if (!(flags & 0x0000ffffUL))
+        flags |= ev_recommended_backends ();
 
 
-      method = 0;
+      backend = 0;
 #if EV_USE_PORT
 #if EV_USE_PORT
-      if (!method && (flags & EVMETHOD_PORT  )) method = port_init   (EV_A_ flags);
+      if (!backend && (flags & EVBACKEND_PORT  )) backend = port_init   (EV_A_ flags);
 #endif
 #if EV_USE_KQUEUE
 #endif
 #if EV_USE_KQUEUE
-      if (!method && (flags & EVMETHOD_KQUEUE)) method = kqueue_init (EV_A_ flags);
+      if (!backend && (flags & EVBACKEND_KQUEUE)) backend = kqueue_init (EV_A_ flags);
 #endif
 #if EV_USE_EPOLL
 #endif
 #if EV_USE_EPOLL
-      if (!method && (flags & EVMETHOD_EPOLL )) method = epoll_init  (EV_A_ flags);
+      if (!backend && (flags & EVBACKEND_EPOLL )) backend = epoll_init  (EV_A_ flags);
 #endif
 #if EV_USE_POLL
 #endif
 #if EV_USE_POLL
-      if (!method && (flags & EVMETHOD_POLL  )) method = poll_init   (EV_A_ flags);
+      if (!backend && (flags & EVBACKEND_POLL  )) backend = poll_init   (EV_A_ flags);
 #endif
 #if EV_USE_SELECT
 #endif
 #if EV_USE_SELECT
-      if (!method && (flags & EVMETHOD_SELECT)) method = select_init (EV_A_ flags);
+      if (!backend && (flags & EVBACKEND_SELECT)) backend = select_init (EV_A_ flags);
 #endif
 
       ev_init (&sigev, sigcb);
 #endif
 
       ev_init (&sigev, sigcb);
@@ -817,19 +872,19 @@ loop_destroy (EV_P)
   int i;
 
 #if EV_USE_PORT
   int i;
 
 #if EV_USE_PORT
-  if (method == EVMETHOD_PORT  ) port_destroy   (EV_A);
+  if (backend == EVBACKEND_PORT  ) port_destroy   (EV_A);
 #endif
 #if EV_USE_KQUEUE
 #endif
 #if EV_USE_KQUEUE
-  if (method == EVMETHOD_KQUEUE) kqueue_destroy (EV_A);
+  if (backend == EVBACKEND_KQUEUE) kqueue_destroy (EV_A);
 #endif
 #if EV_USE_EPOLL
 #endif
 #if EV_USE_EPOLL
-  if (method == EVMETHOD_EPOLL ) epoll_destroy  (EV_A);
+  if (backend == EVBACKEND_EPOLL ) epoll_destroy  (EV_A);
 #endif
 #if EV_USE_POLL
 #endif
 #if EV_USE_POLL
-  if (method == EVMETHOD_POLL  ) poll_destroy   (EV_A);
+  if (backend == EVBACKEND_POLL  ) poll_destroy   (EV_A);
 #endif
 #if EV_USE_SELECT
 #endif
 #if EV_USE_SELECT
-  if (method == EVMETHOD_SELECT) select_destroy (EV_A);
+  if (backend == EVBACKEND_SELECT) select_destroy (EV_A);
 #endif
 
   for (i = NUMPRI; i--; )
 #endif
 
   for (i = NUMPRI; i--; )
@@ -845,20 +900,20 @@ loop_destroy (EV_P)
   array_free (prepare, EMPTY0);
   array_free (check, EMPTY0);
 
   array_free (prepare, EMPTY0);
   array_free (check, EMPTY0);
 
-  method = 0;
+  backend = 0;
 }
 
 static void
 loop_fork (EV_P)
 {
 #if EV_USE_PORT
 }
 
 static void
 loop_fork (EV_P)
 {
 #if EV_USE_PORT
-  if (method == EVMETHOD_PORT  ) port_fork   (EV_A);
+  if (backend == EVBACKEND_PORT  ) port_fork   (EV_A);
 #endif
 #if EV_USE_KQUEUE
 #endif
 #if EV_USE_KQUEUE
-  if (method == EVMETHOD_KQUEUE) kqueue_fork (EV_A);
+  if (backend == EVBACKEND_KQUEUE) kqueue_fork (EV_A);
 #endif
 #if EV_USE_EPOLL
 #endif
 #if EV_USE_EPOLL
-  if (method == EVMETHOD_EPOLL ) epoll_fork  (EV_A);
+  if (backend == EVBACKEND_EPOLL ) epoll_fork  (EV_A);
 #endif
 
   if (ev_is_active (&sigev))
 #endif
 
   if (ev_is_active (&sigev))
@@ -889,7 +944,7 @@ ev_loop_new (unsigned int flags)
 
   loop_init (EV_A_ flags);
 
 
   loop_init (EV_A_ flags);
 
-  if (ev_method (EV_A))
+  if (ev_backend (EV_A))
     return loop;
 
   return 0;
     return loop;
 
   return 0;
@@ -932,7 +987,7 @@ ev_default_loop (unsigned int flags)
 
       loop_init (EV_A_ flags);
 
 
       loop_init (EV_A_ flags);
 
-      if (ev_method (EV_A))
+      if (ev_backend (EV_A))
         {
           siginit (EV_A);
 
         {
           siginit (EV_A);
 
@@ -978,7 +1033,7 @@ ev_default_fork (void)
   struct ev_loop *loop = ev_default_loop_ptr;
 #endif
 
   struct ev_loop *loop = ev_default_loop_ptr;
 #endif
 
-  if (method)
+  if (backend)
     postfork = 1;
 }
 
     postfork = 1;
 }
 
@@ -1220,14 +1275,14 @@ ev_loop (EV_P_ int flags)
 
           if (timercnt)
             {
 
           if (timercnt)
             {
-              ev_tstamp to = ((WT)timers [0])->at - mn_now + method_fudge;
+              ev_tstamp to = ((WT)timers [0])->at - mn_now + backend_fudge;
               if (block > to) block = to;
             }
 
 #if EV_PERIODICS
           if (periodiccnt)
             {
               if (block > to) block = to;
             }
 
 #if EV_PERIODICS
           if (periodiccnt)
             {
-              ev_tstamp to = ((WT)periodics [0])->at - ev_rt_now + method_fudge;
+              ev_tstamp to = ((WT)periodics [0])->at - ev_rt_now + backend_fudge;
               if (block > to) block = to;
             }
 #endif
               if (block > to) block = to;
             }
 #endif
@@ -1235,7 +1290,7 @@ ev_loop (EV_P_ int flags)
           if (expect_false (block < 0.)) block = 0.;
         }
 
           if (expect_false (block < 0.)) block = 0.;
         }
 
-      method_poll (EV_A_ block);
+      backend_poll (EV_A_ block);
 
       /* update ev_rt_now, do magic */
       time_update (EV_A);
 
       /* update ev_rt_now, do magic */
       time_update (EV_A);