]> git.llucax.com Git - software/libev.git/blobdiff - ev.c
renamed METHODs to BACKENDs
[software/libev.git] / ev.c
diff --git a/ev.c b/ev.c
index 3903a6cd42ceb14b5fa0626ee4718a50192a82f4..6cf394a34f72c2af9a722aac9d1e864cdc056beb 100644 (file)
--- a/ev.c
+++ b/ev.c
@@ -43,26 +43,53 @@ extern "C" {
 #  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
 
-# 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
 
-# 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
-
-# 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
-
-# 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
-
-# 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
@@ -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
@@ -760,9 +781,40 @@ enable_secure (void)
 }
 
 unsigned int
-ev_method (EV_P)
+ev_supported_backends (void)
+{
+}
+
+unsigned int
+ev_recommended_backends (void)
 {
-  return method;
+  unsigned int flags;
+
+  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_backend (EV_P)
+{
+  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;
 }
 
 static void
@@ -783,27 +835,29 @@ loop_init (EV_P_ unsigned int flags)
       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"));
 
-      if (!(flags & 0x0000ffff))
-        flags |= 0x0000ffff;
+      if (!(flags & 0x0000ffffUL))
+        flags |= ev_recommended_backends ();
 
       method = 0;
 #if EV_USE_PORT
-      if (!method && (flags & EVMETHOD_PORT  )) method = port_init   (EV_A_ flags);
+      if (!method && (flags & EVBACKEND_PORT  )) method = port_init   (EV_A_ flags);
 #endif
 #if EV_USE_KQUEUE
-      if (!method && (flags & EVMETHOD_KQUEUE)) method = kqueue_init (EV_A_ flags);
+      if (!method && (flags & EVBACKEND_KQUEUE)) method = kqueue_init (EV_A_ flags);
 #endif
 #if EV_USE_EPOLL
-      if (!method && (flags & EVMETHOD_EPOLL )) method = epoll_init  (EV_A_ flags);
+      if (!method && (flags & EVBACKEND_EPOLL )) method = epoll_init  (EV_A_ flags);
 #endif
 #if EV_USE_POLL
-      if (!method && (flags & EVMETHOD_POLL  )) method = poll_init   (EV_A_ flags);
+      if (!method && (flags & EVBACKEND_POLL  )) method = poll_init   (EV_A_ flags);
 #endif
 #if EV_USE_SELECT
-      if (!method && (flags & EVMETHOD_SELECT)) method = select_init (EV_A_ flags);
+      if (!method && (flags & EVBACKEND_SELECT)) method = select_init (EV_A_ flags);
 #endif
 
       ev_init (&sigev, sigcb);
@@ -817,19 +871,19 @@ loop_destroy (EV_P)
   int i;
 
 #if EV_USE_PORT
-  if (method == EVMETHOD_PORT  ) port_destroy   (EV_A);
+  if (method == EVBACKEND_PORT  ) port_destroy   (EV_A);
 #endif
 #if EV_USE_KQUEUE
-  if (method == EVMETHOD_KQUEUE) kqueue_destroy (EV_A);
+  if (method == EVBACKEND_KQUEUE) kqueue_destroy (EV_A);
 #endif
 #if EV_USE_EPOLL
-  if (method == EVMETHOD_EPOLL ) epoll_destroy  (EV_A);
+  if (method == EVBACKEND_EPOLL ) epoll_destroy  (EV_A);
 #endif
 #if EV_USE_POLL
-  if (method == EVMETHOD_POLL  ) poll_destroy   (EV_A);
+  if (method == EVBACKEND_POLL  ) poll_destroy   (EV_A);
 #endif
 #if EV_USE_SELECT
-  if (method == EVMETHOD_SELECT) select_destroy (EV_A);
+  if (method == EVBACKEND_SELECT) select_destroy (EV_A);
 #endif
 
   for (i = NUMPRI; i--; )
@@ -852,13 +906,13 @@ static void
 loop_fork (EV_P)
 {
 #if EV_USE_PORT
-  if (method == EVMETHOD_PORT  ) port_fork   (EV_A);
+  if (method == EVBACKEND_PORT  ) port_fork   (EV_A);
 #endif
 #if EV_USE_KQUEUE
-  if (method == EVMETHOD_KQUEUE) kqueue_fork (EV_A);
+  if (method == EVBACKEND_KQUEUE) kqueue_fork (EV_A);
 #endif
 #if EV_USE_EPOLL
-  if (method == EVMETHOD_EPOLL ) epoll_fork  (EV_A);
+  if (method == EVBACKEND_EPOLL ) epoll_fork  (EV_A);
 #endif
 
   if (ev_is_active (&sigev))