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.
|
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
|
3.9 Thu Dec 31 07:59:59 CET 2009
|
||||||
- signalfd is no longer used by default and has to be requested
|
- signalfd is no longer used by default and has to be requested
|
||||||
explicitly - this means that easy to catch bugs become hard to
|
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
|
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||||
|
|
||||||
VERSION_INFO = 3:0
|
VERSION_INFO = 4:0
|
||||||
|
|
||||||
EXTRA_DIST = LICENSE Changes libev.m4 autogen.sh \
|
EXTRA_DIST = LICENSE Changes libev.m4 autogen.sh \
|
||||||
ev_vars.h ev_wrap.h \
|
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_INIT
|
||||||
AC_CONFIG_SRCDIR([ev_epoll.c])
|
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])
|
AC_CONFIG_HEADERS([config.h])
|
||||||
AM_MAINTAINER_MODE
|
AM_MAINTAINER_MODE
|
||||||
|
|
||||||
@ -9,7 +9,7 @@ AC_PROG_INSTALL
|
|||||||
AC_PROG_LIBTOOL
|
AC_PROG_LIBTOOL
|
||||||
|
|
||||||
if test "x$GCC" = xyes ; then
|
if test "x$GCC" = xyes ; then
|
||||||
CFLAGS="$CFLAGS -O3"
|
CFLAGS="-O3 $CFLAGS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
m4_include([libev.m4])
|
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
|
* 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.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modifica-
|
* Redistribution and use in source and binary forms, with or without modifica-
|
||||||
@ -76,7 +76,7 @@ namespace ev {
|
|||||||
ASYNC = EV_ASYNC,
|
ASYNC = EV_ASYNC,
|
||||||
EMBED = EV_EMBED,
|
EMBED = EV_EMBED,
|
||||||
# undef ERROR // some systems stupidly #define ERROR
|
# undef ERROR // some systems stupidly #define ERROR
|
||||||
ERROR = EV_ERROR,
|
ERROR = EV_ERROR
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
@ -227,15 +227,15 @@ namespace ev {
|
|||||||
ev_unref (EV_AX);
|
ev_unref (EV_AX);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if EV_MINIMAL < 2
|
#if EV_FEATURE_API
|
||||||
unsigned int count () const throw ()
|
unsigned int iteration () const throw ()
|
||||||
{
|
{
|
||||||
return ev_loop_count (EV_AX);
|
return ev_iteration (EV_AX);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int depth () const throw ()
|
unsigned int depth () const throw ()
|
||||||
{
|
{
|
||||||
return ev_loop_depth (EV_AX);
|
return ev_depth (EV_AX);
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_io_collect_interval (tstamp interval) throw ()
|
void set_io_collect_interval (tstamp interval) throw ()
|
||||||
@ -415,6 +415,7 @@ namespace ev {
|
|||||||
#if EV_MULTIPLICITY
|
#if EV_MULTIPLICITY
|
||||||
EV_PX;
|
EV_PX;
|
||||||
|
|
||||||
|
// loop set
|
||||||
void set (EV_P) throw ()
|
void set (EV_P) throw ()
|
||||||
{
|
{
|
||||||
this->EV_A = EV_A;
|
this->EV_A = EV_A;
|
||||||
@ -480,7 +481,7 @@ namespace ev {
|
|||||||
template<class K, void (K::*method)()>
|
template<class K, void (K::*method)()>
|
||||||
static void method_noargs_thunk (EV_P_ ev_watcher *w, int revents)
|
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)
|
EV_END_WATCHER (periodic, periodic)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if EV_SIGNAL_ENABLE
|
||||||
EV_BEGIN_WATCHER (sig, signal)
|
EV_BEGIN_WATCHER (sig, signal)
|
||||||
void set (int signum) throw ()
|
void set (int signum) throw ()
|
||||||
{
|
{
|
||||||
@ -689,7 +691,9 @@ namespace ev {
|
|||||||
start ();
|
start ();
|
||||||
}
|
}
|
||||||
EV_END_WATCHER (sig, signal)
|
EV_END_WATCHER (sig, signal)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if EV_CHILD_ENABLE
|
||||||
EV_BEGIN_WATCHER (child, child)
|
EV_BEGIN_WATCHER (child, child)
|
||||||
void set (int pid, int trace = 0) throw ()
|
void set (int pid, int trace = 0) throw ()
|
||||||
{
|
{
|
||||||
@ -705,6 +709,7 @@ namespace ev {
|
|||||||
start ();
|
start ();
|
||||||
}
|
}
|
||||||
EV_END_WATCHER (child, child)
|
EV_END_WATCHER (child, child)
|
||||||
|
#endif
|
||||||
|
|
||||||
#if EV_STAT_ENABLE
|
#if EV_STAT_ENABLE
|
||||||
EV_BEGIN_WATCHER (stat, stat)
|
EV_BEGIN_WATCHER (stat, stat)
|
||||||
@ -730,19 +735,23 @@ namespace ev {
|
|||||||
EV_END_WATCHER (stat, stat)
|
EV_END_WATCHER (stat, stat)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if EV_IDLE_ENABLE
|
#if EV_IDLE_ENABLE
|
||||||
EV_BEGIN_WATCHER (idle, idle)
|
EV_BEGIN_WATCHER (idle, idle)
|
||||||
void set () throw () { }
|
void set () throw () { }
|
||||||
EV_END_WATCHER (idle, idle)
|
EV_END_WATCHER (idle, idle)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if EV_PREPARE_ENABLE
|
||||||
EV_BEGIN_WATCHER (prepare, prepare)
|
EV_BEGIN_WATCHER (prepare, prepare)
|
||||||
void set () throw () { }
|
void set () throw () { }
|
||||||
EV_END_WATCHER (prepare, prepare)
|
EV_END_WATCHER (prepare, prepare)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if EV_CHECK_ENABLE
|
||||||
EV_BEGIN_WATCHER (check, check)
|
EV_BEGIN_WATCHER (check, check)
|
||||||
void set () throw () { }
|
void set () throw () { }
|
||||||
EV_END_WATCHER (check, check)
|
EV_END_WATCHER (check, check)
|
||||||
|
#endif
|
||||||
|
|
||||||
#if EV_EMBED_ENABLE
|
#if EV_EMBED_ENABLE
|
||||||
EV_BEGIN_WATCHER (embed, embed)
|
EV_BEGIN_WATCHER (embed, embed)
|
||||||
@ -775,8 +784,6 @@ namespace ev {
|
|||||||
|
|
||||||
#if EV_ASYNC_ENABLE
|
#if EV_ASYNC_ENABLE
|
||||||
EV_BEGIN_WATCHER (async, async)
|
EV_BEGIN_WATCHER (async, async)
|
||||||
void set () throw () { }
|
|
||||||
|
|
||||||
void send () throw ()
|
void send () throw ()
|
||||||
{
|
{
|
||||||
ev_async_send (EV_A_ static_cast<ev_async *>(this));
|
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
|
* 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.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modifica-
|
* Redistribution and use in source and binary forms, with or without modifica-
|
||||||
@ -44,55 +44,101 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#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
|
#ifndef EV_MINPRI
|
||||||
# define EV_MINPRI -2
|
# define EV_MINPRI (EV_FEATURE_CONFIG ? -2 : 0)
|
||||||
#endif
|
#endif
|
||||||
#ifndef EV_MAXPRI
|
#ifndef EV_MAXPRI
|
||||||
# define EV_MAXPRI +2
|
# define EV_MAXPRI (EV_FEATURE_CONFIG ? +2 : 0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef EV_MULTIPLICITY
|
#ifndef EV_MULTIPLICITY
|
||||||
# define EV_MULTIPLICITY 1
|
# define EV_MULTIPLICITY EV_FEATURE_CONFIG
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef EV_PERIODIC_ENABLE
|
#ifndef EV_PERIODIC_ENABLE
|
||||||
# define EV_PERIODIC_ENABLE 1
|
# define EV_PERIODIC_ENABLE EV_FEATURE_WATCHERS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef EV_STAT_ENABLE
|
#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
|
#endif
|
||||||
|
|
||||||
#ifndef EV_IDLE_ENABLE
|
#ifndef EV_IDLE_ENABLE
|
||||||
# define EV_IDLE_ENABLE 1
|
# define EV_IDLE_ENABLE EV_FEATURE_WATCHERS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef EV_FORK_ENABLE
|
#ifndef EV_FORK_ENABLE
|
||||||
# define EV_FORK_ENABLE 1
|
# define EV_FORK_ENABLE EV_FEATURE_WATCHERS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef EV_EMBED_ENABLE
|
#ifndef EV_SIGNAL_ENABLE
|
||||||
# define EV_EMBED_ENABLE 1
|
# 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
|
#endif
|
||||||
|
|
||||||
#ifndef EV_ASYNC_ENABLE
|
#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
|
#endif
|
||||||
|
|
||||||
#ifndef EV_WALK_ENABLE
|
#ifndef EV_WALK_ENABLE
|
||||||
# define EV_WALK_ENABLE 0 /* not yet */
|
# define EV_WALK_ENABLE 0 /* not yet */
|
||||||
#endif
|
#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
|
#ifndef EV_ATOMIC_T
|
||||||
# include <signal.h>
|
# include <signal.h>
|
||||||
# define EV_ATOMIC_T sig_atomic_t volatile
|
# define EV_ATOMIC_T sig_atomic_t volatile
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
#if EV_STAT_ENABLE
|
#if EV_STAT_ENABLE
|
||||||
# ifdef _WIN32
|
# ifdef _WIN32
|
||||||
# include <time.h>
|
# include <time.h>
|
||||||
@ -130,40 +176,43 @@ struct ev_loop;
|
|||||||
# define EV_INLINE static
|
# define EV_INLINE static
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef EV_PROTOTYPES
|
||||||
|
# define EV_PROTOTYPES 1
|
||||||
|
#endif
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
#define EV_VERSION_MAJOR 4
|
||||||
|
#define EV_VERSION_MINOR 0
|
||||||
|
|
||||||
/* eventmask, revents, events... */
|
/* eventmask, revents, events... */
|
||||||
#define EV_UNDEF -1 /* guaranteed to be invalid */
|
enum {
|
||||||
#define EV_NONE 0x00 /* no events */
|
EV_UNDEF = -1, /* guaranteed to be invalid */
|
||||||
#define EV_READ 0x01 /* ev_io detected read will not block */
|
EV_NONE = 0x00, /* no events */
|
||||||
#define EV_WRITE 0x02 /* ev_io detected write will not block */
|
EV_READ = 0x01, /* ev_io detected read will not block */
|
||||||
#define EV__IOFDSET 0x80 /* internal use only */
|
EV_WRITE = 0x02, /* ev_io detected write will not block */
|
||||||
#define EV_IO EV_READ /* alias for type-detection */
|
EV__IOFDSET = 0x80, /* internal use only */
|
||||||
#define EV_TIMEOUT 0x00000100 /* timer timed out */
|
EV_IO = EV_READ, /* alias for type-detection */
|
||||||
#define EV_TIMER EV_TIMEOUT /* alias for type-detection */
|
EV_TIMER = 0x00000100, /* timer timed out */
|
||||||
#define EV_PERIODIC 0x00000200 /* periodic timer timed out */
|
EV_TIMEOUT = EV_TIMER, /* pre 4.0 API compatibility */
|
||||||
#define EV_SIGNAL 0x00000400 /* signal was received */
|
EV_PERIODIC = 0x00000200, /* periodic timer timed out */
|
||||||
#define EV_CHILD 0x00000800 /* child/pid had status change */
|
EV_SIGNAL = 0x00000400, /* signal was received */
|
||||||
#define EV_STAT 0x00001000 /* stat data changed */
|
EV_CHILD = 0x00000800, /* child/pid had status change */
|
||||||
#define EV_IDLE 0x00002000 /* event loop is idling */
|
EV_STAT = 0x00001000, /* stat data changed */
|
||||||
#define EV_PREPARE 0x00004000 /* event loop about to poll */
|
EV_IDLE = 0x00002000, /* event loop is idling */
|
||||||
#define EV_CHECK 0x00008000 /* event loop finished poll */
|
EV_PREPARE = 0x00004000, /* event loop about to poll */
|
||||||
#define EV_EMBED 0x00010000 /* embedded event loop needs sweep */
|
EV_CHECK = 0x00008000, /* event loop finished poll */
|
||||||
#define EV_FORK 0x00020000 /* event loop resumed in child */
|
EV_EMBED = 0x00010000, /* embedded event loop needs sweep */
|
||||||
#define EV_ASYNC 0x00040000 /* async intra-loop signal */
|
EV_FORK = 0x00020000, /* event loop resumed in child */
|
||||||
#define EV_CUSTOM 0x01000000 /* for use by user code */
|
EV_ASYNC = 0x00040000, /* async intra-loop signal */
|
||||||
#define EV_ERROR 0x80000000 /* sent when an error occurs */
|
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 */
|
/* can be used to add custom fields to all watchers, while losing binary compatibility */
|
||||||
#ifndef EV_COMMON
|
#ifndef EV_COMMON
|
||||||
# define EV_COMMON void *data;
|
# define EV_COMMON void *data;
|
||||||
#endif
|
#endif
|
||||||
#ifndef EV_PROTOTYPES
|
|
||||||
# define EV_PROTOTYPES 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define EV_VERSION_MAJOR 3
|
|
||||||
#define EV_VERSION_MINOR 9
|
|
||||||
|
|
||||||
#ifndef EV_CB_DECLARE
|
#ifndef EV_CB_DECLARE
|
||||||
# define EV_CB_DECLARE(type) void (*cb)(EV_P_ struct type *w, int revents);
|
# 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))
|
# define EV_CB_INVOKE(watcher,revents) (watcher)->cb (EV_A_ (watcher), (revents))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* not official, do not use */
|
||||||
|
#define EV_CB(type,name) void name (EV_P_ struct ev_ ## type *w, int revents)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* struct member types:
|
* struct member types:
|
||||||
* private: you may look at them, but not change them,
|
* private: you may look at them, but not change them,
|
||||||
@ -191,7 +243,7 @@ struct ev_loop;
|
|||||||
|
|
||||||
#if EV_MINPRI == EV_MAXPRI
|
#if EV_MINPRI == EV_MAXPRI
|
||||||
# define EV_DECL_PRIORITY
|
# define EV_DECL_PRIORITY
|
||||||
#else
|
#elif !defined (EV_DECL_PRIORITY)
|
||||||
# define EV_DECL_PRIORITY int priority;
|
# define EV_DECL_PRIORITY int priority;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -398,24 +450,31 @@ union ev_any_watcher
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
/* bits for ev_default_loop and ev_loop_new */
|
/* flag bits for ev_default_loop and ev_loop_new */
|
||||||
/* the default */
|
enum {
|
||||||
#define EVFLAG_AUTO 0x00000000U /* not quite a mask */
|
/* the default */
|
||||||
/* flag bits */
|
EVFLAG_AUTO = 0x00000000U, /* not quite a mask */
|
||||||
#define EVFLAG_NOENV 0x01000000U /* do NOT consult environment */
|
/* flag bits */
|
||||||
#define EVFLAG_FORKCHECK 0x02000000U /* check for a fork in each iteration */
|
EVFLAG_NOENV = 0x01000000U, /* do NOT consult environment */
|
||||||
/* debugging/feature disable */
|
EVFLAG_FORKCHECK = 0x02000000U, /* check for a fork in each iteration */
|
||||||
#define EVFLAG_NOINOTIFY 0x00100000U /* do not attempt to use inotify */
|
/* debugging/feature disable */
|
||||||
#define EVFLAG_NOSIGFD 0 /* compatibility to pre-3.9 */
|
EVFLAG_NOINOTIFY = 0x00100000U, /* do not attempt to use inotify */
|
||||||
#define EVFLAG_SIGNALFD 0x00200000U /* attempt to use signalfd */
|
#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 */
|
/* method bits to be ored together */
|
||||||
#define EVBACKEND_SELECT 0x00000001U /* about anywhere */
|
enum {
|
||||||
#define EVBACKEND_POLL 0x00000002U /* !win */
|
EVBACKEND_SELECT = 0x00000001U, /* about anywhere */
|
||||||
#define EVBACKEND_EPOLL 0x00000004U /* linux */
|
EVBACKEND_POLL = 0x00000002U, /* !win */
|
||||||
#define EVBACKEND_KQUEUE 0x00000008U /* bsd */
|
EVBACKEND_EPOLL = 0x00000004U, /* linux */
|
||||||
#define EVBACKEND_DEVPOLL 0x00000010U /* solaris 8 */ /* NYI */
|
EVBACKEND_KQUEUE = 0x00000008U, /* bsd */
|
||||||
#define EVBACKEND_PORT 0x00000020U /* solaris 10 */
|
EVBACKEND_DEVPOLL = 0x00000010U, /* solaris 8 */ /* NYI */
|
||||||
#define EVBACKEND_ALL 0x0000003FU
|
EVBACKEND_PORT = 0x00000020U, /* solaris 10 */
|
||||||
|
EVBACKEND_ALL = 0x0000003FU
|
||||||
|
};
|
||||||
|
|
||||||
#if EV_PROTOTYPES
|
#if EV_PROTOTYPES
|
||||||
int ev_version_major (void);
|
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 */
|
#endif /* prototypes */
|
||||||
|
|
||||||
#define EVLOOP_NONBLOCK 1 /* do not block/wait */
|
/* ev_run flags values */
|
||||||
#define EVLOOP_ONESHOT 2 /* block *once* only */
|
enum {
|
||||||
#define EVUNLOOP_CANCEL 0 /* undo unloop */
|
EVRUN_NOWAIT = 1, /* do not block/wait */
|
||||||
#define EVUNLOOP_ONE 1 /* unloop once */
|
EVRUN_ONCE = 2 /* block *once* only */
|
||||||
#define EVUNLOOP_ALL 2 /* unloop all loops */
|
};
|
||||||
|
|
||||||
|
/* ev_break how values */
|
||||||
|
enum {
|
||||||
|
EVBREAK_CANCEL = 0, /* undo unloop */
|
||||||
|
EVBREAK_ONE = 1, /* unloop once */
|
||||||
|
EVBREAK_ALL = 2 /* unloop all loops */
|
||||||
|
};
|
||||||
|
|
||||||
#if EV_PROTOTYPES
|
#if EV_PROTOTYPES
|
||||||
void ev_loop (EV_P_ int flags);
|
void ev_run (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_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
|
* 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);
|
void ev_once (EV_P_ int fd, int events, ev_tstamp timeout, void (*cb)(int revents, void *arg), void *arg);
|
||||||
|
|
||||||
# if EV_MINIMAL < 2
|
# if EV_FEATURE_API
|
||||||
unsigned int ev_loop_count (EV_P); /* number of loop iterations */
|
unsigned int ev_iteration (EV_P); /* number of loop iterations */
|
||||||
unsigned int ev_loop_depth (EV_P); /* #ev_loop enters - #ev_loop leaves */
|
unsigned int ev_depth (EV_P); /* #ev_loop enters - #ev_loop leaves */
|
||||||
void ev_loop_verify (EV_P); /* abort if loop data corrupted */
|
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_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 */
|
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_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_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_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_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)
|
#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))
|
# define ev_set_priority(ev,pri) ((ev), (pri))
|
||||||
#else
|
#else
|
||||||
# define ev_priority(ev) (+(((ev_watcher *)(void *)(ev))->priority))
|
# 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
|
#endif
|
||||||
|
|
||||||
#define ev_periodic_at(ev) (+((ev_watcher_time *)(ev))->at)
|
#define ev_periodic_at(ev) (+((ev_watcher_time *)(ev))->at)
|
||||||
@ -632,7 +698,9 @@ void ev_resume (EV_P);
|
|||||||
/* accepts any ev_watcher type */
|
/* accepts any ev_watcher type */
|
||||||
void ev_feed_event (EV_P_ void *w, int revents);
|
void ev_feed_event (EV_P_ void *w, int revents);
|
||||||
void ev_feed_fd_event (EV_P_ int fd, 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);
|
void ev_feed_signal_event (EV_P_ int signum);
|
||||||
|
#endif
|
||||||
void ev_invoke (EV_P_ void *w, int revents);
|
void ev_invoke (EV_P_ void *w, int revents);
|
||||||
int ev_clear_pending (EV_P_ void *w);
|
int ev_clear_pending (EV_P_ void *w);
|
||||||
|
|
||||||
@ -653,12 +721,16 @@ void ev_periodic_again (EV_P_ ev_periodic *w);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* only supported in the default loop */
|
/* only supported in the default loop */
|
||||||
|
#if EV_SIGNAL_ENABLE
|
||||||
void ev_signal_start (EV_P_ ev_signal *w);
|
void ev_signal_start (EV_P_ ev_signal *w);
|
||||||
void ev_signal_stop (EV_P_ ev_signal *w);
|
void ev_signal_stop (EV_P_ ev_signal *w);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* only supported in the default loop */
|
/* only supported in the default loop */
|
||||||
|
# if EV_CHILD_ENABLE
|
||||||
void ev_child_start (EV_P_ ev_child *w);
|
void ev_child_start (EV_P_ ev_child *w);
|
||||||
void ev_child_stop (EV_P_ ev_child *w);
|
void ev_child_stop (EV_P_ ev_child *w);
|
||||||
|
# endif
|
||||||
|
|
||||||
# if EV_STAT_ENABLE
|
# if EV_STAT_ENABLE
|
||||||
void ev_stat_start (EV_P_ ev_stat *w);
|
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);
|
void ev_idle_stop (EV_P_ ev_idle *w);
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
#if EV_PREPARE_ENABLE
|
||||||
void ev_prepare_start (EV_P_ ev_prepare *w);
|
void ev_prepare_start (EV_P_ ev_prepare *w);
|
||||||
void ev_prepare_stop (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_start (EV_P_ ev_check *w);
|
||||||
void ev_check_stop (EV_P_ ev_check *w);
|
void ev_check_stop (EV_P_ ev_check *w);
|
||||||
|
#endif
|
||||||
|
|
||||||
# if EV_FORK_ENABLE
|
# if EV_FORK_ENABLE
|
||||||
void ev_fork_start (EV_P_ ev_fork *w);
|
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);
|
void ev_async_send (EV_P_ ev_async *w);
|
||||||
# endif
|
# 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
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#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
|
* 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.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modifica-
|
* 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)
|
* c) the inability to handle fork or file descriptors (think dup)
|
||||||
* limits the applicability over poll, so this is not a generic
|
* limits the applicability over poll, so this is not a generic
|
||||||
* poll replacement.
|
* 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
|
* 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
|
* 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)
|
ev.events = (nev & EV_READ ? EPOLLIN : 0)
|
||||||
| (nev & EV_WRITE ? EPOLLOUT : 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;
|
return;
|
||||||
|
|
||||||
if (expect_true (errno == ENOENT))
|
if (expect_true (errno == ENOENT))
|
||||||
@ -165,7 +170,7 @@ epoll_poll (EV_P_ ev_tstamp timeout)
|
|||||||
/* which is fortunately easy to do for us. */
|
/* which is fortunately easy to do for us. */
|
||||||
if (epoll_ctl (backend_fd, want ? EPOLL_CTL_MOD : EPOLL_CTL_DEL, fd, ev))
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
22
deps/libev/ev_kqueue.c
vendored
22
deps/libev/ev_kqueue.c
vendored
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* libev kqueue backend
|
* 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.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modifica-
|
* Redistribution and use in source and binary forms, with or without modifica-
|
||||||
@ -39,7 +39,6 @@
|
|||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/queue.h>
|
|
||||||
#include <sys/event.h>
|
#include <sys/event.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.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);
|
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
|
#ifndef NOTE_EOF
|
||||||
# define NOTE_EOF 0
|
# define NOTE_EOF 0
|
||||||
#endif
|
#endif
|
||||||
@ -73,10 +76,10 @@ kqueue_modify (EV_P_ int fd, int oev, int nev)
|
|||||||
/* event requests even when oev == nev */
|
/* event requests even when oev == nev */
|
||||||
|
|
||||||
if (nev & EV_READ)
|
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)
|
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
|
static void
|
||||||
@ -94,8 +97,7 @@ kqueue_poll (EV_P_ ev_tstamp timeout)
|
|||||||
}
|
}
|
||||||
|
|
||||||
EV_RELEASE_CB;
|
EV_RELEASE_CB;
|
||||||
ts.tv_sec = (time_t)timeout;
|
EV_TS_SET (ts, timeout);
|
||||||
ts.tv_nsec = (long)((timeout - (ev_tstamp)ts.tv_sec) * 1e9);
|
|
||||||
res = kevent (backend_fd, kqueue_changes, kqueue_changecnt, kqueue_events, kqueue_eventmax, &ts);
|
res = kevent (backend_fd, kqueue_changes, kqueue_changecnt, kqueue_events, kqueue_eventmax, &ts);
|
||||||
EV_ACQUIRE_CB;
|
EV_ACQUIRE_CB;
|
||||||
kqueue_changecnt = 0;
|
kqueue_changecnt = 0;
|
||||||
@ -114,11 +116,11 @@ kqueue_poll (EV_P_ ev_tstamp timeout)
|
|||||||
|
|
||||||
if (expect_false (kqueue_events [i].flags & EV_ERROR))
|
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 :) */
|
/* we are only interested in errors for fds that we are interested in :) */
|
||||||
if (anfds [fd].events)
|
if (anfds [fd].events)
|
||||||
{
|
{
|
||||||
if (err == ENOENT) /* resubmit changes on ENOENT */
|
if (err == ENOENT) /* resubmit changes on ENOENT */
|
||||||
kqueue_modify (EV_A_ fd, 0, anfds [fd].events);
|
kqueue_modify (EV_A_ fd, 0, anfds [fd].events);
|
||||||
else if (err == EBADF) /* on EBADF, we re-check the fd */
|
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 */
|
else /* on all other errors, we error out on the fd */
|
||||||
fd_kill (EV_A_ fd);
|
fd_kill (EV_A_ fd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
fd_event (
|
fd_event (
|
||||||
@ -153,7 +155,7 @@ kqueue_poll (EV_P_ ev_tstamp timeout)
|
|||||||
int inline_size
|
int inline_size
|
||||||
kqueue_init (EV_P_ int flags)
|
kqueue_init (EV_P_ int flags)
|
||||||
{
|
{
|
||||||
/* Initalize the kernel queue */
|
/* Initialize the kernel queue */
|
||||||
if ((backend_fd = kqueue ()) < 0)
|
if ((backend_fd = kqueue ()) < 0)
|
||||||
return 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
|
* 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.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modifica-
|
* Redistribution and use in source and binary forms, with or without modifica-
|
||||||
@ -42,7 +42,7 @@
|
|||||||
void inline_size
|
void inline_size
|
||||||
pollidx_init (int *base, int count)
|
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 */
|
* to work on all systems implementing poll */
|
||||||
while (count--)
|
while (count--)
|
||||||
*base++ = -1;
|
*base++ = -1;
|
||||||
@ -106,20 +106,24 @@ poll_poll (EV_P_ ev_tstamp timeout)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
for (p = polls; res; ++p)
|
for (p = polls; res; ++p)
|
||||||
if (expect_false (p->revents)) /* this expect is debatable */
|
{
|
||||||
{
|
assert (("libev: poll() returned illegal result, broken BSD kernel?", p < polls + pollcnt));
|
||||||
--res;
|
|
||||||
|
|
||||||
if (expect_false (p->revents & POLLNVAL))
|
if (expect_false (p->revents)) /* this expect is debatable */
|
||||||
fd_kill (EV_A_ p->fd);
|
{
|
||||||
else
|
--res;
|
||||||
fd_event (
|
|
||||||
EV_A_
|
if (expect_false (p->revents & POLLNVAL))
|
||||||
p->fd,
|
fd_kill (EV_A_ p->fd);
|
||||||
(p->revents & (POLLOUT | POLLERR | POLLHUP) ? EV_WRITE : 0)
|
else
|
||||||
| (p->revents & (POLLIN | POLLERR | POLLHUP) ? EV_READ : 0)
|
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
|
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
|
* 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.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modifica-
|
* 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;
|
uint_t nget = 1;
|
||||||
|
|
||||||
EV_RELEASE_CB;
|
EV_RELEASE_CB;
|
||||||
ts.tv_sec = (time_t)timeout;
|
EV_TS_SET (ts, timeout);
|
||||||
ts.tv_nsec = (long)(timeout - (ev_tstamp)ts.tv_sec) * 1e9;
|
|
||||||
res = port_getn (backend_fd, port_events, port_eventmax, &nget, &ts);
|
res = port_getn (backend_fd, port_events, port_eventmax, &nget, &ts);
|
||||||
EV_ACQUIRE_CB;
|
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_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
|
int inline_size
|
||||||
port_init (EV_P_ int flags)
|
port_init (EV_P_ int flags)
|
||||||
{
|
{
|
||||||
/* Initalize the kernel queue */
|
/* Initialize the kernel queue */
|
||||||
if ((backend_fd = port_create ()) < 0)
|
if ((backend_fd = port_create ()) < 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -137,7 +136,7 @@ port_init (EV_P_ int flags)
|
|||||||
backend_modify = port_modify;
|
backend_modify = port_modify;
|
||||||
backend_poll = port_poll;
|
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);
|
port_events = (port_event_t *)ev_malloc (sizeof (port_event_t) * port_eventmax);
|
||||||
|
|
||||||
return EVBACKEND_PORT;
|
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
|
* 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.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modifica-
|
* 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;
|
int fd_setsize;
|
||||||
|
|
||||||
EV_RELEASE_CB;
|
EV_RELEASE_CB;
|
||||||
tv.tv_sec = (long)timeout;
|
EV_TV_SET (tv, timeout);
|
||||||
tv.tv_usec = (long)((timeout - (ev_tstamp)tv.tv_sec) * 1e6);
|
|
||||||
|
|
||||||
#if EV_SELECT_USE_FD_SET
|
#if EV_SELECT_USE_FD_SET
|
||||||
fd_setsize = sizeof (fd_set);
|
fd_setsize = sizeof (fd_set);
|
||||||
@ -184,7 +183,7 @@ select_poll (EV_P_ ev_tstamp timeout)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _WIN32
|
#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
|
* 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
|
* exists even when the fd sets _are_ provided, so we have to check for this bug
|
||||||
* here and emulate by sleeping manually.
|
* 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
|
* 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.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modifica-
|
* 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, backend)
|
||||||
VARx(int, activecnt) /* total number of active events ("refcount") */
|
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(int, backend_fd)
|
||||||
VARx(ev_tstamp, backend_fudge) /* assumed typical timer resolution */
|
VARx(ev_tstamp, backend_fudge) /* assumed typical timer resolution */
|
||||||
@ -173,9 +173,9 @@ VARx(ev_io, sigfd_w)
|
|||||||
VARx(sigset_t, sigfd_set)
|
VARx(sigset_t, sigfd_set)
|
||||||
#endif
|
#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_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)
|
VARx(void *, userdata)
|
||||||
VAR (release_cb, void (*release_cb)(EV_P))
|
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
|
* 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.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modifica-
|
* 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 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
|
static ev_tstamp
|
||||||
ev_tv_get (struct timeval *tv)
|
ev_tv_get (struct timeval *tv)
|
||||||
{
|
{
|
||||||
if (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
|
else
|
||||||
return -1.;
|
return -1.;
|
||||||
}
|
}
|
||||||
@ -144,7 +140,7 @@ int event_loopexit (struct timeval *tv)
|
|||||||
static void
|
static void
|
||||||
ev_x_cb (struct event *ev, int revents)
|
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_res = revents;
|
||||||
ev->ev_callback (ev->ev_fd, (short)revents, ev->ev_arg);
|
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;
|
revents |= EV_TIMEOUT;
|
||||||
|
|
||||||
if (tv)
|
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;
|
return events & revents;
|
||||||
@ -331,7 +327,7 @@ int event_base_loop (struct event_base *base, int flags)
|
|||||||
{
|
{
|
||||||
dLOOPbase;
|
dLOOPbase;
|
||||||
|
|
||||||
ev_loop (EV_A_ flags);
|
ev_run (EV_A_ flags);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -346,7 +342,7 @@ ev_x_loopexit_cb (int revents, void *base)
|
|||||||
{
|
{
|
||||||
dLOOPbase;
|
dLOOPbase;
|
||||||
|
|
||||||
ev_unloop (EV_A_ EVUNLOOP_ONE);
|
ev_break (EV_A_ EVBREAK_ONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
int event_base_loopexit (struct event_base *base, struct timeval *tv)
|
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
|
* 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.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modifica-
|
* Redistribution and use in source and binary forms, with or without modifica-
|
||||||
@ -46,6 +46,16 @@
|
|||||||
# include "ev.h"
|
# include "ev.h"
|
||||||
#endif
|
#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
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#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 http://software.schmorp.de/pkg/libev
|
||||||
|
|
||||||
dnl libev support
|
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, [], [
|
AC_CHECK_FUNC(clock_gettime, [], [
|
||||||
dnl on linux, try syscall wrapper first
|
dnl on linux, try syscall wrapper first
|
||||||
if test $(uname) = Linux; then
|
if test $(uname) = Linux; then
|
||||||
AC_MSG_CHECKING(for clock_gettime syscall)
|
AC_MSG_CHECKING(for clock_gettime syscall)
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM(
|
AC_LINK_IFELSE([AC_LANG_PROGRAM(
|
||||||
[#include <syscall.h>
|
[#include <unistd.h>
|
||||||
|
#include <sys/syscall.h>
|
||||||
#include <time.h>],
|
#include <time.h>],
|
||||||
[struct timespec ts; int status = syscall (SYS_clock_gettime, CLOCK_REALTIME, &ts)])],
|
[struct timespec ts; int status = syscall (SYS_clock_gettime, CLOCK_REALTIME, &ts)])],
|
||||||
[ac_have_clock_syscall=1
|
[ac_have_clock_syscall=1
|
||||||
@ -36,5 +37,3 @@ AC_CHECK_FUNC(nanosleep, [], [
|
|||||||
|
|
||||||
AC_CHECK_LIB(m, ceil)
|
AC_CHECK_LIB(m, ceil)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user