Upgrade libev to 4.00
This commit is contained in:
parent
3b861db31d
commit
174a3a9a08
46
deps/libev/Changes
vendored
46
deps/libev/Changes
vendored
@ -1,5 +1,51 @@
|
||||
Revision history for libev, a high-performance and full-featured event loop.
|
||||
|
||||
TODO: include ev_xyz_start in each example?
|
||||
TODO: section watcher states/lifetime
|
||||
TODO: use enums //TODO: enum?
|
||||
- "PORTING FROM LIBEV 3.X TO 4.X" (in ev.pod) is recommended reading.
|
||||
- ev_embed_stop did not correctly stop the watcher (very good
|
||||
testcase by Vladimir Timofeev).
|
||||
- ev_run will now always update the current loop time - it errornously
|
||||
didn't when idle watchers were active, causing timers not to fire.
|
||||
- fix a bug where a timeout of zero caused the timer not to fire
|
||||
in the libevent emulation (testcase by Péter Szabó).
|
||||
- applied win32 fixes by Michael Lenaghan (also James Mansion).
|
||||
- replace EV_MINIMAL by EV_FEATURES.
|
||||
- prefer EPOLL_CTL_ADD over EPOLL_CTL_MOD in some more cases, as it
|
||||
seems the former is *much* faster than the latter.
|
||||
- reduce the number of spurious wake-ups with the ports backend.
|
||||
- remove dependency on sys/queue.h on freebsd (patch by Vanilla Hsu).
|
||||
- do async init within ev_async_start, not ev_async_set, which avoids
|
||||
an API quirk where the set function must be called in the C++ API
|
||||
even when there is nothing to set.
|
||||
- add (undocumented) EV_ENABLE when adding events with kqueue,
|
||||
this might help with OS X, which seems to need it despite documenting
|
||||
not to need it (helpfully pointed out by Tilghman Lesher).
|
||||
- do not use poll by default on freebsd, it's broken (what isn't
|
||||
on freebsd...).
|
||||
- configure now prepends -O3, not appends it, so one can still
|
||||
override it.
|
||||
- greatly expanded the portability section.
|
||||
- disable poll backend on AIX, the poll header spams the namespace
|
||||
and it's not worth working around dead platforms (reported
|
||||
and analyzed by Aivars Kalvans).
|
||||
- improve header file compatibility of the standalone eventfd code
|
||||
in an obscure case.
|
||||
- implement EV_AVOID_STDIO option.
|
||||
- do not use sscanf to parse linux version number (smaller, faster,
|
||||
no sscanf dependency).
|
||||
- new EV_CHILD_ENABLE and EV_SIGNAL_ENABLE configurable settings.
|
||||
- update libev.m4 HAVE_CLOCK_SYSCALL test for newer glibcs.
|
||||
- add section on accept() problems to the manpage.
|
||||
- rename EV_TIMEOUT to EV_TIMER.
|
||||
- rename ev_loop_count/depth/verify.
|
||||
- switch to two-digit minor version.
|
||||
- work around an apparent gentoo compiler bug.
|
||||
- define _DARWIN_UNLIMITED_SELECT. just so.
|
||||
- use enum instead of #define for most constants.
|
||||
- improve compatibility to older C++ compilers.
|
||||
|
||||
3.9 Thu Dec 31 07:59:59 CET 2009
|
||||
- signalfd is no longer used by default and has to be requested
|
||||
explicitly - this means that easy to catch bugs become hard to
|
||||
|
2
deps/libev/Makefile.am
vendored
2
deps/libev/Makefile.am
vendored
@ -1,6 +1,6 @@
|
||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||
|
||||
VERSION_INFO = 3:0
|
||||
VERSION_INFO = 4:0
|
||||
|
||||
EXTRA_DIST = LICENSE Changes libev.m4 autogen.sh \
|
||||
ev_vars.h ev_wrap.h \
|
||||
|
4
deps/libev/configure.ac
vendored
4
deps/libev/configure.ac
vendored
@ -1,7 +1,7 @@
|
||||
AC_INIT
|
||||
AC_CONFIG_SRCDIR([ev_epoll.c])
|
||||
|
||||
AM_INIT_AUTOMAKE(libev,3.9) dnl also update ev.h!
|
||||
AM_INIT_AUTOMAKE(libev,4.00) dnl also update ev.h!
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AM_MAINTAINER_MODE
|
||||
|
||||
@ -9,7 +9,7 @@ AC_PROG_INSTALL
|
||||
AC_PROG_LIBTOOL
|
||||
|
||||
if test "x$GCC" = xyes ; then
|
||||
CFLAGS="$CFLAGS -O3"
|
||||
CFLAGS="-O3 $CFLAGS"
|
||||
fi
|
||||
|
||||
m4_include([libev.m4])
|
||||
|
29
deps/libev/ev++.h
vendored
29
deps/libev/ev++.h
vendored
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* libev simple C++ wrapper classes
|
||||
*
|
||||
* Copyright (c) 2007,2008 Marc Alexander Lehmann <libev@schmorp.de>
|
||||
* Copyright (c) 2007,2008,2010 Marc Alexander Lehmann <libev@schmorp.de>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modifica-
|
||||
@ -76,7 +76,7 @@ namespace ev {
|
||||
ASYNC = EV_ASYNC,
|
||||
EMBED = EV_EMBED,
|
||||
# undef ERROR // some systems stupidly #define ERROR
|
||||
ERROR = EV_ERROR,
|
||||
ERROR = EV_ERROR
|
||||
};
|
||||
|
||||
enum
|
||||
@ -227,15 +227,15 @@ namespace ev {
|
||||
ev_unref (EV_AX);
|
||||
}
|
||||
|
||||
#if EV_MINIMAL < 2
|
||||
unsigned int count () const throw ()
|
||||
#if EV_FEATURE_API
|
||||
unsigned int iteration () const throw ()
|
||||
{
|
||||
return ev_loop_count (EV_AX);
|
||||
return ev_iteration (EV_AX);
|
||||
}
|
||||
|
||||
unsigned int depth () const throw ()
|
||||
{
|
||||
return ev_loop_depth (EV_AX);
|
||||
return ev_depth (EV_AX);
|
||||
}
|
||||
|
||||
void set_io_collect_interval (tstamp interval) throw ()
|
||||
@ -415,6 +415,7 @@ namespace ev {
|
||||
#if EV_MULTIPLICITY
|
||||
EV_PX;
|
||||
|
||||
// loop set
|
||||
void set (EV_P) throw ()
|
||||
{
|
||||
this->EV_A = EV_A;
|
||||
@ -480,7 +481,7 @@ namespace ev {
|
||||
template<class K, void (K::*method)()>
|
||||
static void method_noargs_thunk (EV_P_ ev_watcher *w, int revents)
|
||||
{
|
||||
static_cast<K *>(w->data)->*method
|
||||
(static_cast<K *>(w->data)->*method)
|
||||
();
|
||||
}
|
||||
|
||||
@ -674,6 +675,7 @@ namespace ev {
|
||||
EV_END_WATCHER (periodic, periodic)
|
||||
#endif
|
||||
|
||||
#if EV_SIGNAL_ENABLE
|
||||
EV_BEGIN_WATCHER (sig, signal)
|
||||
void set (int signum) throw ()
|
||||
{
|
||||
@ -689,7 +691,9 @@ namespace ev {
|
||||
start ();
|
||||
}
|
||||
EV_END_WATCHER (sig, signal)
|
||||
#endif
|
||||
|
||||
#if EV_CHILD_ENABLE
|
||||
EV_BEGIN_WATCHER (child, child)
|
||||
void set (int pid, int trace = 0) throw ()
|
||||
{
|
||||
@ -705,6 +709,7 @@ namespace ev {
|
||||
start ();
|
||||
}
|
||||
EV_END_WATCHER (child, child)
|
||||
#endif
|
||||
|
||||
#if EV_STAT_ENABLE
|
||||
EV_BEGIN_WATCHER (stat, stat)
|
||||
@ -730,19 +735,23 @@ namespace ev {
|
||||
EV_END_WATCHER (stat, stat)
|
||||
#endif
|
||||
|
||||
#if EV_IDLE_ENABLE
|
||||
#if EV_IDLE_ENABLE
|
||||
EV_BEGIN_WATCHER (idle, idle)
|
||||
void set () throw () { }
|
||||
EV_END_WATCHER (idle, idle)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if EV_PREPARE_ENABLE
|
||||
EV_BEGIN_WATCHER (prepare, prepare)
|
||||
void set () throw () { }
|
||||
EV_END_WATCHER (prepare, prepare)
|
||||
#endif
|
||||
|
||||
#if EV_CHECK_ENABLE
|
||||
EV_BEGIN_WATCHER (check, check)
|
||||
void set () throw () { }
|
||||
EV_END_WATCHER (check, check)
|
||||
#endif
|
||||
|
||||
#if EV_EMBED_ENABLE
|
||||
EV_BEGIN_WATCHER (embed, embed)
|
||||
@ -775,8 +784,6 @@ namespace ev {
|
||||
|
||||
#if EV_ASYNC_ENABLE
|
||||
EV_BEGIN_WATCHER (async, async)
|
||||
void set () throw () { }
|
||||
|
||||
void send () throw ()
|
||||
{
|
||||
ev_async_send (EV_A_ static_cast<ev_async *>(this));
|
||||
|
521
deps/libev/ev.c
vendored
521
deps/libev/ev.c
vendored
File diff suppressed because it is too large
Load Diff
239
deps/libev/ev.h
vendored
239
deps/libev/ev.h
vendored
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* libev native API header
|
||||
*
|
||||
* Copyright (c) 2007,2008,2009 Marc Alexander Lehmann <libev@schmorp.de>
|
||||
* Copyright (c) 2007,2008,2009,2010 Marc Alexander Lehmann <libev@schmorp.de>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modifica-
|
||||
@ -44,55 +44,101 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef double ev_tstamp;
|
||||
/*****************************************************************************/
|
||||
|
||||
/* these priorities are inclusive, higher priorities will be called earlier */
|
||||
/* pre-4.0 compatibility */
|
||||
#ifndef EV_COMPAT3
|
||||
# define EV_COMPAT3 1
|
||||
#endif
|
||||
|
||||
#ifndef EV_FEATURES
|
||||
# define EV_FEATURES 0x7f
|
||||
#endif
|
||||
|
||||
#define EV_FEATURE_CODE ((EV_FEATURES) & 1)
|
||||
#define EV_FEATURE_DATA ((EV_FEATURES) & 2)
|
||||
#define EV_FEATURE_CONFIG ((EV_FEATURES) & 4)
|
||||
#define EV_FEATURE_API ((EV_FEATURES) & 8)
|
||||
#define EV_FEATURE_WATCHERS ((EV_FEATURES) & 16)
|
||||
#define EV_FEATURE_BACKENDS ((EV_FEATURES) & 32)
|
||||
#define EV_FEATURE_OS ((EV_FEATURES) & 64)
|
||||
|
||||
/* these priorities are inclusive, higher priorities will be invoked earlier */
|
||||
#ifndef EV_MINPRI
|
||||
# define EV_MINPRI -2
|
||||
# define EV_MINPRI (EV_FEATURE_CONFIG ? -2 : 0)
|
||||
#endif
|
||||
#ifndef EV_MAXPRI
|
||||
# define EV_MAXPRI +2
|
||||
# define EV_MAXPRI (EV_FEATURE_CONFIG ? +2 : 0)
|
||||
#endif
|
||||
|
||||
#ifndef EV_MULTIPLICITY
|
||||
# define EV_MULTIPLICITY 1
|
||||
# define EV_MULTIPLICITY EV_FEATURE_CONFIG
|
||||
#endif
|
||||
|
||||
#ifndef EV_PERIODIC_ENABLE
|
||||
# define EV_PERIODIC_ENABLE 1
|
||||
# define EV_PERIODIC_ENABLE EV_FEATURE_WATCHERS
|
||||
#endif
|
||||
|
||||
#ifndef EV_STAT_ENABLE
|
||||
# define EV_STAT_ENABLE 1
|
||||
# define EV_STAT_ENABLE EV_FEATURE_WATCHERS
|
||||
#endif
|
||||
|
||||
#ifndef EV_PREPARE_ENABLE
|
||||
# define EV_PREPARE_ENABLE EV_FEATURE_WATCHERS
|
||||
#endif
|
||||
|
||||
#ifndef EV_CHECK_ENABLE
|
||||
# define EV_CHECK_ENABLE EV_FEATURE_WATCHERS
|
||||
#endif
|
||||
|
||||
#ifndef EV_IDLE_ENABLE
|
||||
# define EV_IDLE_ENABLE 1
|
||||
# define EV_IDLE_ENABLE EV_FEATURE_WATCHERS
|
||||
#endif
|
||||
|
||||
#ifndef EV_FORK_ENABLE
|
||||
# define EV_FORK_ENABLE 1
|
||||
# define EV_FORK_ENABLE EV_FEATURE_WATCHERS
|
||||
#endif
|
||||
|
||||
#ifndef EV_EMBED_ENABLE
|
||||
# define EV_EMBED_ENABLE 1
|
||||
#ifndef EV_SIGNAL_ENABLE
|
||||
# define EV_SIGNAL_ENABLE EV_FEATURE_WATCHERS
|
||||
#endif
|
||||
|
||||
#ifndef EV_CHILD_ENABLE
|
||||
# ifdef _WIN32
|
||||
# define EV_CHILD_ENABLE 0
|
||||
# else
|
||||
# define EV_CHILD_ENABLE EV_FEATURE_WATCHERS
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef EV_ASYNC_ENABLE
|
||||
# define EV_ASYNC_ENABLE 1
|
||||
# define EV_ASYNC_ENABLE EV_FEATURE_WATCHERS
|
||||
#endif
|
||||
|
||||
#ifndef EV_EMBED_ENABLE
|
||||
# define EV_EMBED_ENABLE EV_FEATURE_WATCHERS
|
||||
#endif
|
||||
|
||||
#ifndef EV_WALK_ENABLE
|
||||
# define EV_WALK_ENABLE 0 /* not yet */
|
||||
#endif
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
#if EV_CHILD_ENABLE && !EV_SIGNAL_ENABLE
|
||||
# undef EV_SIGNAL_ENABLE
|
||||
# define EV_SIGNAL_ENABLE 1
|
||||
#endif
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
typedef double ev_tstamp;
|
||||
|
||||
#ifndef EV_ATOMIC_T
|
||||
# include <signal.h>
|
||||
# define EV_ATOMIC_T sig_atomic_t volatile
|
||||
#endif
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
#if EV_STAT_ENABLE
|
||||
# ifdef _WIN32
|
||||
# include <time.h>
|
||||
@ -130,40 +176,43 @@ struct ev_loop;
|
||||
# define EV_INLINE static
|
||||
#endif
|
||||
|
||||
#ifndef EV_PROTOTYPES
|
||||
# define EV_PROTOTYPES 1
|
||||
#endif
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
#define EV_VERSION_MAJOR 4
|
||||
#define EV_VERSION_MINOR 0
|
||||
|
||||
/* eventmask, revents, events... */
|
||||
#define EV_UNDEF -1 /* guaranteed to be invalid */
|
||||
#define EV_NONE 0x00 /* no events */
|
||||
#define EV_READ 0x01 /* ev_io detected read will not block */
|
||||
#define EV_WRITE 0x02 /* ev_io detected write will not block */
|
||||
#define EV__IOFDSET 0x80 /* internal use only */
|
||||
#define EV_IO EV_READ /* alias for type-detection */
|
||||
#define EV_TIMEOUT 0x00000100 /* timer timed out */
|
||||
#define EV_TIMER EV_TIMEOUT /* alias for type-detection */
|
||||
#define EV_PERIODIC 0x00000200 /* periodic timer timed out */
|
||||
#define EV_SIGNAL 0x00000400 /* signal was received */
|
||||
#define EV_CHILD 0x00000800 /* child/pid had status change */
|
||||
#define EV_STAT 0x00001000 /* stat data changed */
|
||||
#define EV_IDLE 0x00002000 /* event loop is idling */
|
||||
#define EV_PREPARE 0x00004000 /* event loop about to poll */
|
||||
#define EV_CHECK 0x00008000 /* event loop finished poll */
|
||||
#define EV_EMBED 0x00010000 /* embedded event loop needs sweep */
|
||||
#define EV_FORK 0x00020000 /* event loop resumed in child */
|
||||
#define EV_ASYNC 0x00040000 /* async intra-loop signal */
|
||||
#define EV_CUSTOM 0x01000000 /* for use by user code */
|
||||
#define EV_ERROR 0x80000000 /* sent when an error occurs */
|
||||
enum {
|
||||
EV_UNDEF = -1, /* guaranteed to be invalid */
|
||||
EV_NONE = 0x00, /* no events */
|
||||
EV_READ = 0x01, /* ev_io detected read will not block */
|
||||
EV_WRITE = 0x02, /* ev_io detected write will not block */
|
||||
EV__IOFDSET = 0x80, /* internal use only */
|
||||
EV_IO = EV_READ, /* alias for type-detection */
|
||||
EV_TIMER = 0x00000100, /* timer timed out */
|
||||
EV_TIMEOUT = EV_TIMER, /* pre 4.0 API compatibility */
|
||||
EV_PERIODIC = 0x00000200, /* periodic timer timed out */
|
||||
EV_SIGNAL = 0x00000400, /* signal was received */
|
||||
EV_CHILD = 0x00000800, /* child/pid had status change */
|
||||
EV_STAT = 0x00001000, /* stat data changed */
|
||||
EV_IDLE = 0x00002000, /* event loop is idling */
|
||||
EV_PREPARE = 0x00004000, /* event loop about to poll */
|
||||
EV_CHECK = 0x00008000, /* event loop finished poll */
|
||||
EV_EMBED = 0x00010000, /* embedded event loop needs sweep */
|
||||
EV_FORK = 0x00020000, /* event loop resumed in child */
|
||||
EV_ASYNC = 0x00040000, /* async intra-loop signal */
|
||||
EV_CUSTOM = 0x01000000, /* for use by user code */
|
||||
EV_ERROR = 0x80000000 /* sent when an error occurs */
|
||||
};
|
||||
|
||||
/* can be used to add custom fields to all watchers, while losing binary compatibility */
|
||||
#ifndef EV_COMMON
|
||||
# define EV_COMMON void *data;
|
||||
#endif
|
||||
#ifndef EV_PROTOTYPES
|
||||
# define EV_PROTOTYPES 1
|
||||
#endif
|
||||
|
||||
#define EV_VERSION_MAJOR 3
|
||||
#define EV_VERSION_MINOR 9
|
||||
|
||||
#ifndef EV_CB_DECLARE
|
||||
# define EV_CB_DECLARE(type) void (*cb)(EV_P_ struct type *w, int revents);
|
||||
@ -172,6 +221,9 @@ struct ev_loop;
|
||||
# define EV_CB_INVOKE(watcher,revents) (watcher)->cb (EV_A_ (watcher), (revents))
|
||||
#endif
|
||||
|
||||
/* not official, do not use */
|
||||
#define EV_CB(type,name) void name (EV_P_ struct ev_ ## type *w, int revents)
|
||||
|
||||
/*
|
||||
* struct member types:
|
||||
* private: you may look at them, but not change them,
|
||||
@ -191,7 +243,7 @@ struct ev_loop;
|
||||
|
||||
#if EV_MINPRI == EV_MAXPRI
|
||||
# define EV_DECL_PRIORITY
|
||||
#else
|
||||
#elif !defined (EV_DECL_PRIORITY)
|
||||
# define EV_DECL_PRIORITY int priority;
|
||||
#endif
|
||||
|
||||
@ -398,24 +450,31 @@ union ev_any_watcher
|
||||
#endif
|
||||
};
|
||||
|
||||
/* bits for ev_default_loop and ev_loop_new */
|
||||
/* the default */
|
||||
#define EVFLAG_AUTO 0x00000000U /* not quite a mask */
|
||||
/* flag bits */
|
||||
#define EVFLAG_NOENV 0x01000000U /* do NOT consult environment */
|
||||
#define EVFLAG_FORKCHECK 0x02000000U /* check for a fork in each iteration */
|
||||
/* debugging/feature disable */
|
||||
#define EVFLAG_NOINOTIFY 0x00100000U /* do not attempt to use inotify */
|
||||
#define EVFLAG_NOSIGFD 0 /* compatibility to pre-3.9 */
|
||||
#define EVFLAG_SIGNALFD 0x00200000U /* attempt to use signalfd */
|
||||
/* flag bits for ev_default_loop and ev_loop_new */
|
||||
enum {
|
||||
/* the default */
|
||||
EVFLAG_AUTO = 0x00000000U, /* not quite a mask */
|
||||
/* flag bits */
|
||||
EVFLAG_NOENV = 0x01000000U, /* do NOT consult environment */
|
||||
EVFLAG_FORKCHECK = 0x02000000U, /* check for a fork in each iteration */
|
||||
/* debugging/feature disable */
|
||||
EVFLAG_NOINOTIFY = 0x00100000U, /* do not attempt to use inotify */
|
||||
#if EV_COMPAT3
|
||||
EVFLAG_NOSIGFD = 0, /* compatibility to pre-3.9 */
|
||||
#endif
|
||||
EVFLAG_SIGNALFD = 0x00200000U /* attempt to use signalfd */
|
||||
};
|
||||
|
||||
/* method bits to be ored together */
|
||||
#define EVBACKEND_SELECT 0x00000001U /* about anywhere */
|
||||
#define EVBACKEND_POLL 0x00000002U /* !win */
|
||||
#define EVBACKEND_EPOLL 0x00000004U /* linux */
|
||||
#define EVBACKEND_KQUEUE 0x00000008U /* bsd */
|
||||
#define EVBACKEND_DEVPOLL 0x00000010U /* solaris 8 */ /* NYI */
|
||||
#define EVBACKEND_PORT 0x00000020U /* solaris 10 */
|
||||
#define EVBACKEND_ALL 0x0000003FU
|
||||
enum {
|
||||
EVBACKEND_SELECT = 0x00000001U, /* about anywhere */
|
||||
EVBACKEND_POLL = 0x00000002U, /* !win */
|
||||
EVBACKEND_EPOLL = 0x00000004U, /* linux */
|
||||
EVBACKEND_KQUEUE = 0x00000008U, /* bsd */
|
||||
EVBACKEND_DEVPOLL = 0x00000010U, /* solaris 8 */ /* NYI */
|
||||
EVBACKEND_PORT = 0x00000020U, /* solaris 10 */
|
||||
EVBACKEND_ALL = 0x0000003FU
|
||||
};
|
||||
|
||||
#if EV_PROTOTYPES
|
||||
int ev_version_major (void);
|
||||
@ -520,15 +579,22 @@ void ev_walk (EV_P_ int types, void (*cb)(EV_P_ int type, void *w));
|
||||
|
||||
#endif /* prototypes */
|
||||
|
||||
#define EVLOOP_NONBLOCK 1 /* do not block/wait */
|
||||
#define EVLOOP_ONESHOT 2 /* block *once* only */
|
||||
#define EVUNLOOP_CANCEL 0 /* undo unloop */
|
||||
#define EVUNLOOP_ONE 1 /* unloop once */
|
||||
#define EVUNLOOP_ALL 2 /* unloop all loops */
|
||||
/* ev_run flags values */
|
||||
enum {
|
||||
EVRUN_NOWAIT = 1, /* do not block/wait */
|
||||
EVRUN_ONCE = 2 /* block *once* only */
|
||||
};
|
||||
|
||||
/* ev_break how values */
|
||||
enum {
|
||||
EVBREAK_CANCEL = 0, /* undo unloop */
|
||||
EVBREAK_ONE = 1, /* unloop once */
|
||||
EVBREAK_ALL = 2 /* unloop all loops */
|
||||
};
|
||||
|
||||
#if EV_PROTOTYPES
|
||||
void ev_loop (EV_P_ int flags);
|
||||
void ev_unloop (EV_P_ int how); /* set to 1 to break out of event loop, set to 2 to break out of all event loops */
|
||||
void ev_run (EV_P_ int flags);
|
||||
void ev_break (EV_P_ int how); /* set to 1 to break out of event loop, set to 2 to break out of all event loops */
|
||||
|
||||
/*
|
||||
* ref/unref can be used to add or remove a refcount on the mainloop. every watcher
|
||||
@ -544,10 +610,10 @@ void ev_unref (EV_P);
|
||||
*/
|
||||
void ev_once (EV_P_ int fd, int events, ev_tstamp timeout, void (*cb)(int revents, void *arg), void *arg);
|
||||
|
||||
# if EV_MINIMAL < 2
|
||||
unsigned int ev_loop_count (EV_P); /* number of loop iterations */
|
||||
unsigned int ev_loop_depth (EV_P); /* #ev_loop enters - #ev_loop leaves */
|
||||
void ev_loop_verify (EV_P); /* abort if loop data corrupted */
|
||||
# if EV_FEATURE_API
|
||||
unsigned int ev_iteration (EV_P); /* number of loop iterations */
|
||||
unsigned int ev_depth (EV_P); /* #ev_loop enters - #ev_loop leaves */
|
||||
void ev_verify (EV_P); /* abort if loop data corrupted */
|
||||
|
||||
void ev_set_io_collect_interval (EV_P_ ev_tstamp interval); /* sleep at least this time, default 0 */
|
||||
void ev_set_timeout_collect_interval (EV_P_ ev_tstamp interval); /* sleep at least this time, default 0 */
|
||||
@ -590,7 +656,7 @@ void ev_resume (EV_P);
|
||||
#define ev_check_set(ev) /* nop, yes, this is a serious in-joke */
|
||||
#define ev_embed_set(ev,other_) do { (ev)->other = (other_); } while (0)
|
||||
#define ev_fork_set(ev) /* nop, yes, this is a serious in-joke */
|
||||
#define ev_async_set(ev) do { (ev)->sent = 0; } while (0)
|
||||
#define ev_async_set(ev) /* nop, yes, this is a serious in-joke */
|
||||
|
||||
#define ev_io_init(ev,cb,fd,events) do { ev_init ((ev), (cb)); ev_io_set ((ev),(fd),(events)); } while (0)
|
||||
#define ev_timer_init(ev,cb,after,repeat) do { ev_init ((ev), (cb)); ev_timer_set ((ev),(after),(repeat)); } while (0)
|
||||
@ -615,7 +681,7 @@ void ev_resume (EV_P);
|
||||
# define ev_set_priority(ev,pri) ((ev), (pri))
|
||||
#else
|
||||
# define ev_priority(ev) (+(((ev_watcher *)(void *)(ev))->priority))
|
||||
# define ev_set_priority(ev,pri) ( (ev_watcher *)(void *)(ev))->priority = (pri)
|
||||
# define ev_set_priority(ev,pri) ( (ev_watcher *)(void *)(ev))->priority = (pri)
|
||||
#endif
|
||||
|
||||
#define ev_periodic_at(ev) (+((ev_watcher_time *)(ev))->at)
|
||||
@ -632,7 +698,9 @@ void ev_resume (EV_P);
|
||||
/* accepts any ev_watcher type */
|
||||
void ev_feed_event (EV_P_ void *w, int revents);
|
||||
void ev_feed_fd_event (EV_P_ int fd, int revents);
|
||||
#if EV_SIGNAL_ENABLE
|
||||
void ev_feed_signal_event (EV_P_ int signum);
|
||||
#endif
|
||||
void ev_invoke (EV_P_ void *w, int revents);
|
||||
int ev_clear_pending (EV_P_ void *w);
|
||||
|
||||
@ -653,12 +721,16 @@ void ev_periodic_again (EV_P_ ev_periodic *w);
|
||||
#endif
|
||||
|
||||
/* only supported in the default loop */
|
||||
#if EV_SIGNAL_ENABLE
|
||||
void ev_signal_start (EV_P_ ev_signal *w);
|
||||
void ev_signal_stop (EV_P_ ev_signal *w);
|
||||
#endif
|
||||
|
||||
/* only supported in the default loop */
|
||||
# if EV_CHILD_ENABLE
|
||||
void ev_child_start (EV_P_ ev_child *w);
|
||||
void ev_child_stop (EV_P_ ev_child *w);
|
||||
# endif
|
||||
|
||||
# if EV_STAT_ENABLE
|
||||
void ev_stat_start (EV_P_ ev_stat *w);
|
||||
@ -671,11 +743,15 @@ void ev_idle_start (EV_P_ ev_idle *w);
|
||||
void ev_idle_stop (EV_P_ ev_idle *w);
|
||||
# endif
|
||||
|
||||
#if EV_PREPARE_ENABLE
|
||||
void ev_prepare_start (EV_P_ ev_prepare *w);
|
||||
void ev_prepare_stop (EV_P_ ev_prepare *w);
|
||||
#endif
|
||||
|
||||
#if EV_CHECK_ENABLE
|
||||
void ev_check_start (EV_P_ ev_check *w);
|
||||
void ev_check_stop (EV_P_ ev_check *w);
|
||||
#endif
|
||||
|
||||
# if EV_FORK_ENABLE
|
||||
void ev_fork_start (EV_P_ ev_fork *w);
|
||||
@ -695,6 +771,25 @@ void ev_async_stop (EV_P_ ev_async *w);
|
||||
void ev_async_send (EV_P_ ev_async *w);
|
||||
# endif
|
||||
|
||||
#if EV_COMPAT3
|
||||
#define EVLOOP_NONBLOCK EVRUN_NOWAIT
|
||||
#define EVLOOP_ONESHOT EVRUN_ONCE
|
||||
#define EVUNLOOP_CANCEL EVBREAK_CANCEL
|
||||
#define EVUNLOOP_ONE EVBREAK_ONE
|
||||
#define EVUNLOOP_ALL EVBREAK_ALL
|
||||
#if EV_PROTOTYPES
|
||||
EV_INLINE void ev_loop (EV_P_ int flags) { ev_run (EV_A_ flags); }
|
||||
EV_INLINE void ev_unloop (EV_P_ int how ) { ev_break (EV_A_ how ); }
|
||||
#if EV_FEATURE_API
|
||||
EV_INLINE void ev_loop_count (EV_P) { ev_iteration (EV_A); }
|
||||
EV_INLINE void ev_loop_depth (EV_P) { ev_depth (EV_A); }
|
||||
EV_INLINE void ev_loop_verify (EV_P) { ev_verify (EV_A); }
|
||||
#endif
|
||||
#endif
|
||||
#else
|
||||
typedef struct ev_loop ev_loop;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
826
deps/libev/ev.pod
vendored
826
deps/libev/ev.pod
vendored
File diff suppressed because it is too large
Load Diff
11
deps/libev/ev_epoll.c
vendored
11
deps/libev/ev_epoll.c
vendored
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* libev epoll fd activity backend
|
||||
*
|
||||
* Copyright (c) 2007,2008,2009 Marc Alexander Lehmann <libev@schmorp.de>
|
||||
* Copyright (c) 2007,2008,2009,2010 Marc Alexander Lehmann <libev@schmorp.de>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modifica-
|
||||
@ -49,6 +49,11 @@
|
||||
* c) the inability to handle fork or file descriptors (think dup)
|
||||
* limits the applicability over poll, so this is not a generic
|
||||
* poll replacement.
|
||||
* d) epoll doesn't work the same as select with many file descriptors
|
||||
* (such as files). while not critical, no other advanced interface
|
||||
* seems to share this (rather non-unixy) limitation.
|
||||
* e) epoll claims to be embeddable, but in practise you never get
|
||||
* a ready event for the epoll fd.
|
||||
*
|
||||
* lots of "weird code" and complication handling in this file is due
|
||||
* to these design problems with epoll, as we try very hard to avoid
|
||||
@ -85,7 +90,7 @@ epoll_modify (EV_P_ int fd, int oev, int nev)
|
||||
ev.events = (nev & EV_READ ? EPOLLIN : 0)
|
||||
| (nev & EV_WRITE ? EPOLLOUT : 0);
|
||||
|
||||
if (expect_true (!epoll_ctl (backend_fd, oev ? EPOLL_CTL_MOD : EPOLL_CTL_ADD, fd, &ev)))
|
||||
if (expect_true (!epoll_ctl (backend_fd, oev && oldmask != nev ? EPOLL_CTL_MOD : EPOLL_CTL_ADD, fd, &ev)))
|
||||
return;
|
||||
|
||||
if (expect_true (errno == ENOENT))
|
||||
@ -165,7 +170,7 @@ epoll_poll (EV_P_ ev_tstamp timeout)
|
||||
/* which is fortunately easy to do for us. */
|
||||
if (epoll_ctl (backend_fd, want ? EPOLL_CTL_MOD : EPOLL_CTL_DEL, fd, ev))
|
||||
{
|
||||
postfork = 1; /* an error occured, recreate kernel state */
|
||||
postfork = 1; /* an error occurred, recreate kernel state */
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
22
deps/libev/ev_kqueue.c
vendored
22
deps/libev/ev_kqueue.c
vendored
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* libev kqueue backend
|
||||
*
|
||||
* Copyright (c) 2007,2008,2009 Marc Alexander Lehmann <libev@schmorp.de>
|
||||
* Copyright (c) 2007,2008,2009,2010 Marc Alexander Lehmann <libev@schmorp.de>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modifica-
|
||||
@ -39,7 +39,6 @@
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/queue.h>
|
||||
#include <sys/event.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
@ -53,6 +52,10 @@ kqueue_change (EV_P_ int fd, int filter, int flags, int fflags)
|
||||
EV_SET (&kqueue_changes [kqueue_changecnt - 1], fd, filter, flags, fflags, 0, 0);
|
||||
}
|
||||
|
||||
/* OS X at least needs this */
|
||||
#ifndef EV_ENABLE
|
||||
# define EV_ENABLE 0
|
||||
#endif
|
||||
#ifndef NOTE_EOF
|
||||
# define NOTE_EOF 0
|
||||
#endif
|
||||
@ -73,10 +76,10 @@ kqueue_modify (EV_P_ int fd, int oev, int nev)
|
||||
/* event requests even when oev == nev */
|
||||
|
||||
if (nev & EV_READ)
|
||||
kqueue_change (EV_A_ fd, EVFILT_READ , EV_ADD, NOTE_EOF);
|
||||
kqueue_change (EV_A_ fd, EVFILT_READ , EV_ADD | EV_ENABLE, NOTE_EOF);
|
||||
|
||||
if (nev & EV_WRITE)
|
||||
kqueue_change (EV_A_ fd, EVFILT_WRITE, EV_ADD, NOTE_EOF);
|
||||
kqueue_change (EV_A_ fd, EVFILT_WRITE, EV_ADD | EV_ENABLE, NOTE_EOF);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -94,8 +97,7 @@ kqueue_poll (EV_P_ ev_tstamp timeout)
|
||||
}
|
||||
|
||||
EV_RELEASE_CB;
|
||||
ts.tv_sec = (time_t)timeout;
|
||||
ts.tv_nsec = (long)((timeout - (ev_tstamp)ts.tv_sec) * 1e9);
|
||||
EV_TS_SET (ts, timeout);
|
||||
res = kevent (backend_fd, kqueue_changes, kqueue_changecnt, kqueue_events, kqueue_eventmax, &ts);
|
||||
EV_ACQUIRE_CB;
|
||||
kqueue_changecnt = 0;
|
||||
@ -114,11 +116,11 @@ kqueue_poll (EV_P_ ev_tstamp timeout)
|
||||
|
||||
if (expect_false (kqueue_events [i].flags & EV_ERROR))
|
||||
{
|
||||
int err = kqueue_events [i].data;
|
||||
int err = kqueue_events [i].data;
|
||||
|
||||
/* we are only interested in errors for fds that we are interested in :) */
|
||||
if (anfds [fd].events)
|
||||
{
|
||||
{
|
||||
if (err == ENOENT) /* resubmit changes on ENOENT */
|
||||
kqueue_modify (EV_A_ fd, 0, anfds [fd].events);
|
||||
else if (err == EBADF) /* on EBADF, we re-check the fd */
|
||||
@ -130,7 +132,7 @@ kqueue_poll (EV_P_ ev_tstamp timeout)
|
||||
}
|
||||
else /* on all other errors, we error out on the fd */
|
||||
fd_kill (EV_A_ fd);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
fd_event (
|
||||
@ -153,7 +155,7 @@ kqueue_poll (EV_P_ ev_tstamp timeout)
|
||||
int inline_size
|
||||
kqueue_init (EV_P_ int flags)
|
||||
{
|
||||
/* Initalize the kernel queue */
|
||||
/* Initialize the kernel queue */
|
||||
if ((backend_fd = kqueue ()) < 0)
|
||||
return 0;
|
||||
|
||||
|
34
deps/libev/ev_poll.c
vendored
34
deps/libev/ev_poll.c
vendored
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* libev poll fd activity backend
|
||||
*
|
||||
* Copyright (c) 2007,2008,2009 Marc Alexander Lehmann <libev@schmorp.de>
|
||||
* Copyright (c) 2007,2008,2009,2010 Marc Alexander Lehmann <libev@schmorp.de>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modifica-
|
||||
@ -42,7 +42,7 @@
|
||||
void inline_size
|
||||
pollidx_init (int *base, int count)
|
||||
{
|
||||
/* consider using memset (.., -1, ...), which is pratically guarenteed
|
||||
/* consider using memset (.., -1, ...), which is practically guaranteed
|
||||
* to work on all systems implementing poll */
|
||||
while (count--)
|
||||
*base++ = -1;
|
||||
@ -106,20 +106,24 @@ poll_poll (EV_P_ ev_tstamp timeout)
|
||||
}
|
||||
else
|
||||
for (p = polls; res; ++p)
|
||||
if (expect_false (p->revents)) /* this expect is debatable */
|
||||
{
|
||||
--res;
|
||||
{
|
||||
assert (("libev: poll() returned illegal result, broken BSD kernel?", p < polls + pollcnt));
|
||||
|
||||
if (expect_false (p->revents & POLLNVAL))
|
||||
fd_kill (EV_A_ p->fd);
|
||||
else
|
||||
fd_event (
|
||||
EV_A_
|
||||
p->fd,
|
||||
(p->revents & (POLLOUT | POLLERR | POLLHUP) ? EV_WRITE : 0)
|
||||
| (p->revents & (POLLIN | POLLERR | POLLHUP) ? EV_READ : 0)
|
||||
);
|
||||
}
|
||||
if (expect_false (p->revents)) /* this expect is debatable */
|
||||
{
|
||||
--res;
|
||||
|
||||
if (expect_false (p->revents & POLLNVAL))
|
||||
fd_kill (EV_A_ p->fd);
|
||||
else
|
||||
fd_event (
|
||||
EV_A_
|
||||
p->fd,
|
||||
(p->revents & (POLLOUT | POLLERR | POLLHUP) ? EV_WRITE : 0)
|
||||
| (p->revents & (POLLIN | POLLERR | POLLHUP) ? EV_READ : 0)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int inline_size
|
||||
|
11
deps/libev/ev_port.c
vendored
11
deps/libev/ev_port.c
vendored
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* libev solaris event port backend
|
||||
*
|
||||
* Copyright (c) 2007,2008,2009 Marc Alexander Lehmann <libev@schmorp.de>
|
||||
* Copyright (c) 2007,2008,2009,2010 Marc Alexander Lehmann <libev@schmorp.de>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modifica-
|
||||
@ -86,8 +86,7 @@ port_poll (EV_P_ ev_tstamp timeout)
|
||||
uint_t nget = 1;
|
||||
|
||||
EV_RELEASE_CB;
|
||||
ts.tv_sec = (time_t)timeout;
|
||||
ts.tv_nsec = (long)(timeout - (ev_tstamp)ts.tv_sec) * 1e9;
|
||||
EV_TS_SET (ts, timeout);
|
||||
res = port_getn (backend_fd, port_events, port_eventmax, &nget, &ts);
|
||||
EV_ACQUIRE_CB;
|
||||
|
||||
@ -112,7 +111,7 @@ port_poll (EV_P_ ev_tstamp timeout)
|
||||
| (port_events [i].portev_events & (POLLIN | POLLERR | POLLHUP) ? EV_READ : 0)
|
||||
);
|
||||
|
||||
port_associate_and_check (EV_A_ fd, anfds [fd].events);
|
||||
fd_change (EV_A_ fd, EV__IOFDSET);
|
||||
}
|
||||
}
|
||||
|
||||
@ -127,7 +126,7 @@ port_poll (EV_P_ ev_tstamp timeout)
|
||||
int inline_size
|
||||
port_init (EV_P_ int flags)
|
||||
{
|
||||
/* Initalize the kernel queue */
|
||||
/* Initialize the kernel queue */
|
||||
if ((backend_fd = port_create ()) < 0)
|
||||
return 0;
|
||||
|
||||
@ -137,7 +136,7 @@ port_init (EV_P_ int flags)
|
||||
backend_modify = port_modify;
|
||||
backend_poll = port_poll;
|
||||
|
||||
port_eventmax = 64; /* intiial number of events receivable per poll */
|
||||
port_eventmax = 64; /* initial number of events receivable per poll */
|
||||
port_events = (port_event_t *)ev_malloc (sizeof (port_event_t) * port_eventmax);
|
||||
|
||||
return EVBACKEND_PORT;
|
||||
|
7
deps/libev/ev_select.c
vendored
7
deps/libev/ev_select.c
vendored
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* libev select fd activity backend
|
||||
*
|
||||
* Copyright (c) 2007,2008,2009 Marc Alexander Lehmann <libev@schmorp.de>
|
||||
* Copyright (c) 2007,2008,2009,2010 Marc Alexander Lehmann <libev@schmorp.de>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modifica-
|
||||
@ -141,8 +141,7 @@ select_poll (EV_P_ ev_tstamp timeout)
|
||||
int fd_setsize;
|
||||
|
||||
EV_RELEASE_CB;
|
||||
tv.tv_sec = (long)timeout;
|
||||
tv.tv_usec = (long)((timeout - (ev_tstamp)tv.tv_sec) * 1e6);
|
||||
EV_TV_SET (tv, timeout);
|
||||
|
||||
#if EV_SELECT_USE_FD_SET
|
||||
fd_setsize = sizeof (fd_set);
|
||||
@ -184,7 +183,7 @@ select_poll (EV_P_ ev_tstamp timeout)
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
/* select on windows errornously returns EINVAL when no fd sets have been
|
||||
/* select on windows erroneously returns EINVAL when no fd sets have been
|
||||
* provided (this is documented). what microsoft doesn't tell you that this bug
|
||||
* exists even when the fd sets _are_ provided, so we have to check for this bug
|
||||
* here and emulate by sleeping manually.
|
||||
|
8
deps/libev/ev_vars.h
vendored
8
deps/libev/ev_vars.h
vendored
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* loop member variable declarations
|
||||
*
|
||||
* Copyright (c) 2007,2008,2009 Marc Alexander Lehmann <libev@schmorp.de>
|
||||
* Copyright (c) 2007,2008,2009,2010 Marc Alexander Lehmann <libev@schmorp.de>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modifica-
|
||||
@ -48,7 +48,7 @@ VARx(ev_tstamp, timeout_blocktime)
|
||||
|
||||
VARx(int, backend)
|
||||
VARx(int, activecnt) /* total number of active events ("refcount") */
|
||||
VARx(unsigned char, loop_done) /* signal by ev_unloop */
|
||||
VARx(EV_ATOMIC_T, loop_done) /* signal by ev_break */
|
||||
|
||||
VARx(int, backend_fd)
|
||||
VARx(ev_tstamp, backend_fudge) /* assumed typical timer resolution */
|
||||
@ -173,9 +173,9 @@ VARx(ev_io, sigfd_w)
|
||||
VARx(sigset_t, sigfd_set)
|
||||
#endif
|
||||
|
||||
#if EV_MINIMAL < 2 || EV_GENWRAP
|
||||
#if EV_FEATURE_API || EV_GENWRAP
|
||||
VARx(unsigned int, loop_count) /* total number of loop iterations/blocks */
|
||||
VARx(unsigned int, loop_depth) /* #ev_loop enters - #ev_loop leaves */
|
||||
VARx(unsigned int, loop_depth) /* #ev_run enters - #ev_run leaves */
|
||||
|
||||
VARx(void *, userdata)
|
||||
VAR (release_cb, void (*release_cb)(EV_P))
|
||||
|
22
deps/libev/event.c
vendored
22
deps/libev/event.c
vendored
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* libevent compatibility layer
|
||||
*
|
||||
* Copyright (c) 2007,2008,2009 Marc Alexander Lehmann <libev@schmorp.de>
|
||||
* Copyright (c) 2007,2008,2009,2010 Marc Alexander Lehmann <libev@schmorp.de>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modifica-
|
||||
@ -63,18 +63,14 @@ struct event_base
|
||||
|
||||
static struct event_base *ev_x_cur;
|
||||
|
||||
static void
|
||||
ev_tv_set (struct timeval *tv, ev_tstamp at)
|
||||
{
|
||||
tv->tv_sec = (long)at;
|
||||
tv->tv_usec = (long)((at - (ev_tstamp)tv->tv_sec) * 1e6);
|
||||
}
|
||||
|
||||
static ev_tstamp
|
||||
ev_tv_get (struct timeval *tv)
|
||||
{
|
||||
if (tv)
|
||||
return tv->tv_sec + tv->tv_usec * 1e-6;
|
||||
{
|
||||
ev_tstamp after = tv->tv_sec + tv->tv_usec * 1e-6;
|
||||
return after ? after : 1e-6;
|
||||
}
|
||||
else
|
||||
return -1.;
|
||||
}
|
||||
@ -144,7 +140,7 @@ int event_loopexit (struct timeval *tv)
|
||||
static void
|
||||
ev_x_cb (struct event *ev, int revents)
|
||||
{
|
||||
revents &= EV_READ | EV_WRITE | EV_TIMEOUT | EV_SIGNAL;
|
||||
revents &= EV_READ | EV_WRITE | EV_TIMER | EV_SIGNAL;
|
||||
|
||||
ev->ev_res = revents;
|
||||
ev->ev_callback (ev->ev_fd, (short)revents, ev->ev_arg);
|
||||
@ -302,7 +298,7 @@ int event_pending (struct event *ev, short events, struct timeval *tv)
|
||||
revents |= EV_TIMEOUT;
|
||||
|
||||
if (tv)
|
||||
ev_tv_set (tv, ev_now (EV_A)); /* not sure if this is right :) */
|
||||
EV_TV_SET (tv, ev_now (EV_A)); /* not sure if this is right :) */
|
||||
}
|
||||
|
||||
return events & revents;
|
||||
@ -331,7 +327,7 @@ int event_base_loop (struct event_base *base, int flags)
|
||||
{
|
||||
dLOOPbase;
|
||||
|
||||
ev_loop (EV_A_ flags);
|
||||
ev_run (EV_A_ flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -346,7 +342,7 @@ ev_x_loopexit_cb (int revents, void *base)
|
||||
{
|
||||
dLOOPbase;
|
||||
|
||||
ev_unloop (EV_A_ EVUNLOOP_ONE);
|
||||
ev_break (EV_A_ EVBREAK_ONE);
|
||||
}
|
||||
|
||||
int event_base_loopexit (struct event_base *base, struct timeval *tv)
|
||||
|
12
deps/libev/event.h
vendored
12
deps/libev/event.h
vendored
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* libevent compatibility header, only core events supported
|
||||
*
|
||||
* Copyright (c) 2007,2008 Marc Alexander Lehmann <libev@schmorp.de>
|
||||
* Copyright (c) 2007,2008,2010 Marc Alexander Lehmann <libev@schmorp.de>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modifica-
|
||||
@ -46,6 +46,16 @@
|
||||
# include "ev.h"
|
||||
#endif
|
||||
|
||||
#ifndef EVLOOP_NONBLOCK
|
||||
# define EVLOOP_NONBLOCK EVRUN_NOWAIT
|
||||
#endif
|
||||
#ifndef EVLOOP_ONESHOT
|
||||
# define EVLOOP_ONESHOT EVRUN_ONCE
|
||||
#endif
|
||||
#ifndef EV_TIMEOUT
|
||||
# define EV_TIMEOUT EV_TIMER
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
9
deps/libev/libev.m4
vendored
9
deps/libev/libev.m4
vendored
@ -2,16 +2,17 @@ dnl this file is part of libev, do not make local modifications
|
||||
dnl http://software.schmorp.de/pkg/libev
|
||||
|
||||
dnl libev support
|
||||
AC_CHECK_HEADERS(sys/inotify.h sys/epoll.h sys/event.h sys/queue.h port.h poll.h sys/select.h sys/eventfd.h)
|
||||
AC_CHECK_HEADERS(sys/inotify.h sys/epoll.h sys/event.h port.h poll.h sys/select.h sys/eventfd.h sys/signalfd.h)
|
||||
|
||||
AC_CHECK_FUNCS(inotify_init epoll_ctl kqueue port_create poll select eventfd)
|
||||
AC_CHECK_FUNCS(inotify_init epoll_ctl kqueue port_create poll select eventfd signalfd)
|
||||
|
||||
AC_CHECK_FUNC(clock_gettime, [], [
|
||||
dnl on linux, try syscall wrapper first
|
||||
if test $(uname) = Linux; then
|
||||
AC_MSG_CHECKING(for clock_gettime syscall)
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM(
|
||||
[#include <syscall.h>
|
||||
[#include <unistd.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <time.h>],
|
||||
[struct timespec ts; int status = syscall (SYS_clock_gettime, CLOCK_REALTIME, &ts)])],
|
||||
[ac_have_clock_syscall=1
|
||||
@ -36,5 +37,3 @@ AC_CHECK_FUNC(nanosleep, [], [
|
||||
|
||||
AC_CHECK_LIB(m, ceil)
|
||||
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user