#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
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);
static struct ev_child *childs [PID_HASHSIZE];
static struct ev_signal childev;
+#ifndef WIN32
+
#ifndef WCONTINUED
# define WCONTINUED 0
#endif
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
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
ev_watcher_init (&sigev, sigcb);
siginit ();
+#ifndef WIN32
ev_signal_init (&childev, childcb, SIGCHLD);
ev_signal_start (&childev);
+#endif
}
}