|
|
|
@ -128,7 +128,7 @@ extern "C" {
|
|
|
|
|
# define EV_USE_EVENTFD 0
|
|
|
|
|
# endif
|
|
|
|
|
# endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#include <math.h>
|
|
|
|
@ -238,11 +238,15 @@ extern "C" {
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if 0 /* debugging */
|
|
|
|
|
# define EV_VERIFY 1
|
|
|
|
|
# define EV_VERIFY 3
|
|
|
|
|
# define EV_USE_4HEAP 1
|
|
|
|
|
# define EV_HEAP_CACHE_AT 1
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef EV_VERIFY
|
|
|
|
|
# define EV_VERIFY !EV_MINIMAL
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef EV_USE_4HEAP
|
|
|
|
|
# define EV_USE_4HEAP !EV_MINIMAL
|
|
|
|
|
#endif
|
|
|
|
@ -296,12 +300,7 @@ int eventfd (unsigned int initval, int flags);
|
|
|
|
|
|
|
|
|
|
/**/
|
|
|
|
|
|
|
|
|
|
/* EV_VERIFY: enable internal consistency checks
|
|
|
|
|
* undefined or zero: no verification done or available
|
|
|
|
|
* 1 or higher: ev_loop_verify function available
|
|
|
|
|
* 2 or higher: ev_loop_verify is called frequently
|
|
|
|
|
*/
|
|
|
|
|
#if EV_VERIFY >= 1
|
|
|
|
|
#if EV_VERIFY >= 3
|
|
|
|
|
# define EV_FREQUENT_CHECK ev_loop_verify (EV_A)
|
|
|
|
|
#else
|
|
|
|
|
# define EV_FREQUENT_CHECK do { } while (0)
|
|
|
|
@ -1486,6 +1485,7 @@ loop_fork (EV_P)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if EV_MULTIPLICITY
|
|
|
|
|
|
|
|
|
|
struct ev_loop *
|
|
|
|
|
ev_loop_new (unsigned int flags)
|
|
|
|
|
{
|
|
|
|
@ -1521,10 +1521,12 @@ array_check (W **ws, int cnt)
|
|
|
|
|
while (cnt--)
|
|
|
|
|
assert (("active index mismatch", ev_active (ws [cnt]) == cnt + 1));
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
void
|
|
|
|
|
ev_loop_verify (EV_P)
|
|
|
|
|
{
|
|
|
|
|
#if EV_VERIFY
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
checkheap (timers, timercnt);
|
|
|
|
@ -1539,15 +1541,15 @@ ev_loop_verify (EV_P)
|
|
|
|
|
#if EV_FORK_ENABLE
|
|
|
|
|
array_check ((W **)forks, forkcnt);
|
|
|
|
|
#endif
|
|
|
|
|
array_check ((W **)prepares, preparecnt);
|
|
|
|
|
array_check ((W **)checks, checkcnt);
|
|
|
|
|
#if EV_ASYNC_ENABLE
|
|
|
|
|
array_check ((W **)asyncs, asynccnt);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
array_check ((W **)prepares, preparecnt);
|
|
|
|
|
array_check ((W **)checks, checkcnt);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
#endif /* multiplicity */
|
|
|
|
|
|
|
|
|
|
#if EV_MULTIPLICITY
|
|
|
|
|
struct ev_loop *
|
|
|
|
@ -1622,8 +1624,6 @@ call_pending (EV_P)
|
|
|
|
|
{
|
|
|
|
|
int pri;
|
|
|
|
|
|
|
|
|
|
EV_FREQUENT_CHECK;
|
|
|
|
|
|
|
|
|
|
for (pri = NUMPRI; pri--; )
|
|
|
|
|
while (pendingcnt [pri])
|
|
|
|
|
{
|
|
|
|
@ -1635,10 +1635,9 @@ call_pending (EV_P)
|
|
|
|
|
|
|
|
|
|
p->w->pending = 0;
|
|
|
|
|
EV_CB_INVOKE (p->w, p->events);
|
|
|
|
|
EV_FREQUENT_CHECK;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EV_FREQUENT_CHECK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if EV_IDLE_ENABLE
|
|
|
|
@ -1700,6 +1699,7 @@ void inline_size
|
|
|
|
|
periodics_reify (EV_P)
|
|
|
|
|
{
|
|
|
|
|
EV_FREQUENT_CHECK;
|
|
|
|
|
|
|
|
|
|
while (periodiccnt && ANHE_at (periodics [HEAP0]) < ev_rt_now)
|
|
|
|
|
{
|
|
|
|
|
ev_periodic *w = (ev_periodic *)ANHE_w (periodics [HEAP0]);
|
|
|
|
@ -1715,7 +1715,6 @@ periodics_reify (EV_P)
|
|
|
|
|
|
|
|
|
|
ANHE_at_cache (periodics [HEAP0]);
|
|
|
|
|
downheap (periodics, periodiccnt, HEAP0);
|
|
|
|
|
EV_FREQUENT_CHECK;
|
|
|
|
|
}
|
|
|
|
|
else if (w->interval)
|
|
|
|
|
{
|
|
|
|
@ -1861,6 +1860,10 @@ ev_loop (EV_P_ int flags)
|
|
|
|
|
|
|
|
|
|
do
|
|
|
|
|
{
|
|
|
|
|
#if EV_VERIFY >= 2
|
|
|
|
|
ev_loop_verify (EV_A);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef _WIN32
|
|
|
|
|
if (expect_false (curpid)) /* penalise the forking check even more */
|
|
|
|
|
if (expect_false (getpid () != curpid))
|
|
|
|
|