]> 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 23507bdd559eccf79239ffbaaca331756d8608a9..6c2f3977d815a785bbdc78b5acd24b8f410b9f10 100644 (file)
--- a/ev.c
+++ b/ev.c
@@ -44,7 +44,9 @@
 #include <assert.h>
 #include <errno.h>
 #include <sys/types.h>
-#include <sys/wait.h>
+#ifndef WIN32
+# include <sys/wait.h>
+#endif
 #include <sys/time.h>
 #include <time.h>
 
 # define EV_USE_EPOLL 0
 #endif
 
+#ifndef EV_USE_KQUEUE
+# define EV_USE_KQUEUE 0
+#endif
+
 #ifndef EV_USE_REALTIME
 # define EV_USE_REALTIME 1
 #endif
@@ -436,12 +442,14 @@ sigcb (struct ev_io *iow, int revents)
 static void
 siginit (void)
 {
+#ifndef WIN32
   fcntl (sigpipe [0], F_SETFD, FD_CLOEXEC);
   fcntl (sigpipe [1], F_SETFD, FD_CLOEXEC);
 
   /* rather than sort out wether we really need nb, set it */
   fcntl (sigpipe [0], F_SETFL, O_NONBLOCK);
   fcntl (sigpipe [1], F_SETFL, O_NONBLOCK);
+#endif
 
   ev_io_set (&sigev, sigpipe [0], EV_READ);
   ev_io_start (&sigev);
@@ -463,6 +471,8 @@ static int checkmax, checkcnt;
 static struct ev_child *childs [PID_HASHSIZE];
 static struct ev_signal childev;
 
+#ifndef WIN32
+
 #ifndef WCONTINUED
 # define WCONTINUED 0
 #endif
@@ -477,13 +487,19 @@ childcb (struct ev_signal *sw, int revents)
     for (w = childs [pid & (PID_HASHSIZE - 1)]; w; w = w->next)
       if (w->pid == pid || !w->pid)
         {
-          w->status = status;
+          w->rpid    = pid;
+          w->rstatus = status;
           event ((W)w, EV_CHILD);
         }
 }
 
+#endif
+
 /*****************************************************************************/
 
+#if EV_USE_KQUEUE
+# include "ev_kqueue.c"
+#endif
 #if EV_USE_EPOLL
 # include "ev_epoll.c"
 #endif
@@ -541,6 +557,9 @@ int ev_init (int methods)
             methods = EVMETHOD_ANY;
 
       ev_method = 0;
+#if EV_USE_KQUEUE
+      if (!ev_method && (methods & EVMETHOD_KQUEUE)) kqueue_init (methods);
+#endif
 #if EV_USE_EPOLL
       if (!ev_method && (methods & EVMETHOD_EPOLL )) epoll_init  (methods);
 #endif
@@ -556,8 +575,10 @@ int ev_init (int methods)
           ev_watcher_init (&sigev, sigcb);
           siginit ();
 
+#ifndef WIN32
           ev_signal_init (&childev, childcb, SIGCHLD);
           ev_signal_start (&childev);
+#endif
         }
     }
 
@@ -860,6 +881,9 @@ ev_clear_pending (W w)
 static void
 ev_start (W w, int active)
 {
+  if (w->priority < EV_MINPRI) w->priority = EV_MINPRI;
+  if (w->priority > EV_MAXPRI) w->priority = EV_MAXPRI;
+
   w->active = active;
 }