|
|
@ -1529,7 +1529,7 @@ ecb_binary32_to_binary16 (uint32_t x) |
|
|
|
#if EV_FEATURE_CODE |
|
|
|
# define inline_speed ecb_inline |
|
|
|
#else |
|
|
|
# define inline_speed static noinline |
|
|
|
# define inline_speed noinline static |
|
|
|
#endif |
|
|
|
|
|
|
|
#define NUMPRI (EV_MAXPRI - EV_MINPRI + 1) |
|
|
@ -1586,7 +1586,8 @@ static EV_ATOMIC_T have_monotonic; /* did clock_gettime (CLOCK_MONOTONIC) work? |
|
|
|
#include <float.h> |
|
|
|
|
|
|
|
/* a floor() replacement function, should be independent of ev_tstamp type */ |
|
|
|
static ev_tstamp noinline |
|
|
|
noinline |
|
|
|
static ev_tstamp |
|
|
|
ev_floor (ev_tstamp v) |
|
|
|
{ |
|
|
|
/* the choice of shift factor is not terribly important */ |
|
|
@ -1628,7 +1629,8 @@ ev_floor (ev_tstamp v) |
|
|
|
# include <sys/utsname.h> |
|
|
|
#endif |
|
|
|
|
|
|
|
static unsigned int noinline ecb_cold |
|
|
|
noinline ecb_cold |
|
|
|
static unsigned int |
|
|
|
ev_linux_version (void) |
|
|
|
{ |
|
|
|
#ifdef __linux |
|
|
@ -1667,7 +1669,8 @@ ev_linux_version (void) |
|
|
|
/*****************************************************************************/ |
|
|
|
|
|
|
|
#if EV_AVOID_STDIO |
|
|
|
static void noinline ecb_cold |
|
|
|
noinline ecb_cold |
|
|
|
static void |
|
|
|
ev_printerr (const char *msg) |
|
|
|
{ |
|
|
|
write (STDERR_FILENO, msg, strlen (msg)); |
|
|
@ -1676,13 +1679,15 @@ ev_printerr (const char *msg) |
|
|
|
|
|
|
|
static void (*syserr_cb)(const char *msg) EV_THROW; |
|
|
|
|
|
|
|
void ecb_cold |
|
|
|
ecb_cold |
|
|
|
void |
|
|
|
ev_set_syserr_cb (void (*cb)(const char *msg) EV_THROW) EV_THROW |
|
|
|
{ |
|
|
|
syserr_cb = cb; |
|
|
|
} |
|
|
|
|
|
|
|
static void noinline ecb_cold |
|
|
|
noinline ecb_cold |
|
|
|
static void |
|
|
|
ev_syserr (const char *msg) |
|
|
|
{ |
|
|
|
if (!msg) |
|
|
@ -1723,7 +1728,8 @@ ev_realloc_emul (void *ptr, long size) EV_THROW |
|
|
|
|
|
|
|
static void *(*alloc)(void *ptr, long size) EV_THROW = ev_realloc_emul; |
|
|
|
|
|
|
|
void ecb_cold |
|
|
|
ecb_cold |
|
|
|
void |
|
|
|
ev_set_allocator (void *(*cb)(void *ptr, long size) EV_THROW) EV_THROW |
|
|
|
{ |
|
|
|
alloc = cb; |
|
|
@ -1942,7 +1948,8 @@ array_nextsize (int elem, int cur, int cnt) |
|
|
|
return ncur; |
|
|
|
} |
|
|
|
|
|
|
|
static void * noinline ecb_cold |
|
|
|
noinline ecb_cold |
|
|
|
static void * |
|
|
|
array_realloc (int elem, void *base, int *cur, int cnt) |
|
|
|
{ |
|
|
|
*cur = array_nextsize (elem, *cur, cnt); |
|
|
@ -1955,7 +1962,7 @@ array_realloc (int elem, void *base, int *cur, int cnt) |
|
|
|
#define array_needsize(type,base,cur,cnt,init) \ |
|
|
|
if (expect_false ((cnt) > (cur))) \ |
|
|
|
{ \ |
|
|
|
int ecb_unused ocur_ = (cur); \ |
|
|
|
ecb_unused int ocur_ = (cur); \ |
|
|
|
(base) = (type *)array_realloc \ |
|
|
|
(sizeof (type), (base), &(cur), (cnt)); \ |
|
|
|
init ((base) + (ocur_), (cur) - ocur_); \ |
|
|
@ -1977,12 +1984,14 @@ array_realloc (int elem, void *base, int *cur, int cnt) |
|
|
|
/*****************************************************************************/ |
|
|
|
|
|
|
|
/* dummy callback for pending events */ |
|
|
|
static void noinline |
|
|
|
noinline |
|
|
|
static void |
|
|
|
pendingcb (EV_P_ ev_prepare *w, int revents) |
|
|
|
{ |
|
|
|
} |
|
|
|
|
|
|
|
void noinline |
|
|
|
noinline |
|
|
|
void |
|
|
|
ev_feed_event (EV_P_ void *w, int revents) EV_THROW |
|
|
|
{ |
|
|
|
W w_ = (W)w; |
|
|
@ -2122,7 +2131,8 @@ fd_reify (EV_P) |
|
|
|
} |
|
|
|
|
|
|
|
/* something about the given fd changed */ |
|
|
|
inline_size void |
|
|
|
inline_size |
|
|
|
void |
|
|
|
fd_change (EV_P_ int fd, int flags) |
|
|
|
{ |
|
|
|
unsigned char reify = anfds [fd].reify; |
|
|
@ -2137,7 +2147,7 @@ fd_change (EV_P_ int fd, int flags) |
|
|
|
} |
|
|
|
|
|
|
|
/* the given fd is invalid/unusable, so make sure it doesn't hurt us anymore */ |
|
|
|
inline_speed void ecb_cold |
|
|
|
inline_speed ecb_cold void |
|
|
|
fd_kill (EV_P_ int fd) |
|
|
|
{ |
|
|
|
ev_io *w; |
|
|
@ -2150,7 +2160,7 @@ fd_kill (EV_P_ int fd) |
|
|
|
} |
|
|
|
|
|
|
|
/* check whether the given fd is actually valid, for error recovery */ |
|
|
|
inline_size int ecb_cold |
|
|
|
inline_size ecb_cold int |
|
|
|
fd_valid (int fd) |
|
|
|
{ |
|
|
|
#ifdef _WIN32 |
|
|
@ -2161,7 +2171,8 @@ fd_valid (int fd) |
|
|
|
} |
|
|
|
|
|
|
|
/* called on EBADF to verify fds */ |
|
|
|
static void noinline ecb_cold |
|
|
|
noinline ecb_cold |
|
|
|
static void |
|
|
|
fd_ebadf (EV_P) |
|
|
|
{ |
|
|
|
int fd; |
|
|
@ -2173,7 +2184,8 @@ fd_ebadf (EV_P) |
|
|
|
} |
|
|
|
|
|
|
|
/* called on ENOMEM in select/poll to kill some fds and retry */ |
|
|
|
static void noinline ecb_cold |
|
|
|
noinline ecb_cold |
|
|
|
static void |
|
|
|
fd_enomem (EV_P) |
|
|
|
{ |
|
|
|
int fd; |
|
|
@ -2187,7 +2199,8 @@ fd_enomem (EV_P) |
|
|
|
} |
|
|
|
|
|
|
|
/* usually called after fork if backend needs to re-arm all fds from scratch */ |
|
|
|
static void noinline |
|
|
|
noinline |
|
|
|
static void |
|
|
|
fd_rearm_all (EV_P) |
|
|
|
{ |
|
|
|
int fd; |
|
|
@ -2378,7 +2391,8 @@ static ANSIG signals [EV_NSIG - 1]; |
|
|
|
|
|
|
|
#if EV_SIGNAL_ENABLE || EV_ASYNC_ENABLE |
|
|
|
|
|
|
|
static void noinline ecb_cold |
|
|
|
noinline ecb_cold |
|
|
|
static void |
|
|
|
evpipe_init (EV_P) |
|
|
|
{ |
|
|
|
if (!ev_is_active (&pipe_w)) |
|
|
@ -2566,7 +2580,8 @@ ev_sighandler (int signum) |
|
|
|
ev_feed_signal (signum); |
|
|
|
} |
|
|
|
|
|
|
|
void noinline |
|
|
|
noinline |
|
|
|
void |
|
|
|
ev_feed_signal_event (EV_P_ int signum) EV_THROW |
|
|
|
{ |
|
|
|
WL w; |
|
|
@ -2693,20 +2708,20 @@ childcb (EV_P_ ev_signal *sw, int revents) |
|
|
|
# include "ev_select.c" |
|
|
|
#endif |
|
|
|
|
|
|
|
int ecb_cold |
|
|
|
ecb_cold int |
|
|
|
ev_version_major (void) EV_THROW |
|
|
|
{ |
|
|
|
return EV_VERSION_MAJOR; |
|
|
|
} |
|
|
|
|
|
|
|
int ecb_cold |
|
|
|
ecb_cold int |
|
|
|
ev_version_minor (void) EV_THROW |
|
|
|
{ |
|
|
|
return EV_VERSION_MINOR; |
|
|
|
} |
|
|
|
|
|
|
|
/* return true if we are running with elevated privileges and should ignore env variables */ |
|
|
|
int inline_size ecb_cold |
|
|
|
inline_size ecb_cold int |
|
|
|
enable_secure (void) |
|
|
|
{ |
|
|
|
#ifdef _WIN32 |
|
|
@ -2717,7 +2732,8 @@ enable_secure (void) |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
unsigned int ecb_cold |
|
|
|
ecb_cold |
|
|
|
unsigned int |
|
|
|
ev_supported_backends (void) EV_THROW |
|
|
|
{ |
|
|
|
unsigned int flags = 0; |
|
|
@ -2731,7 +2747,8 @@ ev_supported_backends (void) EV_THROW |
|
|
|
return flags; |
|
|
|
} |
|
|
|
|
|
|
|
unsigned int ecb_cold |
|
|
|
ecb_cold |
|
|
|
unsigned int |
|
|
|
ev_recommended_backends (void) EV_THROW |
|
|
|
{ |
|
|
|
unsigned int flags = ev_supported_backends (); |
|
|
@ -2753,7 +2770,8 @@ ev_recommended_backends (void) EV_THROW |
|
|
|
return flags; |
|
|
|
} |
|
|
|
|
|
|
|
unsigned int ecb_cold |
|
|
|
ecb_cold |
|
|
|
unsigned int |
|
|
|
ev_embeddable_backends (void) EV_THROW |
|
|
|
{ |
|
|
|
int flags = EVBACKEND_EPOLL | EVBACKEND_KQUEUE | EVBACKEND_PORT; |
|
|
@ -2823,7 +2841,8 @@ ev_set_loop_release_cb (EV_P_ void (*release)(EV_P) EV_THROW, void (*acquire)(EV |
|
|
|
#endif |
|
|
|
|
|
|
|
/* initialise a loop structure, must be zero-initialised */ |
|
|
|
static void noinline ecb_cold |
|
|
|
noinline ecb_cold |
|
|
|
static void |
|
|
|
loop_init (EV_P_ unsigned int flags) EV_THROW |
|
|
|
{ |
|
|
|
if (!backend) |
|
|
@ -2920,7 +2939,8 @@ loop_init (EV_P_ unsigned int flags) EV_THROW |
|
|
|
} |
|
|
|
|
|
|
|
/* free up a loop structure */ |
|
|
|
void ecb_cold |
|
|
|
ecb_cold |
|
|
|
void |
|
|
|
ev_loop_destroy (EV_P) |
|
|
|
{ |
|
|
|
int i; |
|
|
@ -3072,7 +3092,8 @@ loop_fork (EV_P) |
|
|
|
|
|
|
|
#if EV_MULTIPLICITY |
|
|
|
|
|
|
|
struct ev_loop * ecb_cold |
|
|
|
ecb_cold |
|
|
|
struct ev_loop * |
|
|
|
ev_loop_new (unsigned int flags) EV_THROW |
|
|
|
{ |
|
|
|
EV_P = (struct ev_loop *)ev_malloc (sizeof (struct ev_loop)); |
|
|
@ -3090,7 +3111,8 @@ ev_loop_new (unsigned int flags) EV_THROW |
|
|
|
#endif /* multiplicity */ |
|
|
|
|
|
|
|
#if EV_VERIFY |
|
|
|
static void noinline ecb_cold |
|
|
|
noinline ecb_cold |
|
|
|
static void |
|
|
|
verify_watcher (EV_P_ W w) |
|
|
|
{ |
|
|
|
assert (("libev: watcher has invalid priority", ABSPRI (w) >= 0 && ABSPRI (w) < NUMPRI)); |
|
|
@ -3099,7 +3121,8 @@ verify_watcher (EV_P_ W w) |
|
|
|
assert (("libev: pending watcher not on pending queue", pendings [ABSPRI (w)][w->pending - 1].w == w)); |
|
|
|
} |
|
|
|
|
|
|
|
static void noinline ecb_cold |
|
|
|
noinline ecb_cold |
|
|
|
static void |
|
|
|
verify_heap (EV_P_ ANHE *heap, int N) |
|
|
|
{ |
|
|
|
int i; |
|
|
@ -3114,7 +3137,8 @@ verify_heap (EV_P_ ANHE *heap, int N) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static void noinline ecb_cold |
|
|
|
noinline ecb_cold |
|
|
|
static void |
|
|
|
array_verify (EV_P_ W *ws, int cnt) |
|
|
|
{ |
|
|
|
while (cnt--) |
|
|
@ -3213,7 +3237,8 @@ ev_verify (EV_P) EV_THROW |
|
|
|
#endif |
|
|
|
|
|
|
|
#if EV_MULTIPLICITY |
|
|
|
struct ev_loop * ecb_cold |
|
|
|
ecb_cold |
|
|
|
struct ev_loop * |
|
|
|
#else |
|
|
|
int |
|
|
|
#endif |
|
|
@ -3271,7 +3296,8 @@ ev_pending_count (EV_P) EV_THROW |
|
|
|
return count; |
|
|
|
} |
|
|
|
|
|
|
|
void noinline |
|
|
|
noinline |
|
|
|
void |
|
|
|
ev_invoke_pending (EV_P) |
|
|
|
{ |
|
|
|
pendingpri = NUMPRI; |
|
|
@ -3356,7 +3382,8 @@ timers_reify (EV_P) |
|
|
|
|
|
|
|
#if EV_PERIODIC_ENABLE |
|
|
|
|
|
|
|
static void noinline |
|
|
|
noinline |
|
|
|
static void |
|
|
|
periodic_recalc (EV_P_ ev_periodic *w) |
|
|
|
{ |
|
|
|
ev_tstamp interval = w->interval > MIN_INTERVAL ? w->interval : MIN_INTERVAL; |
|
|
@ -3424,7 +3451,8 @@ periodics_reify (EV_P) |
|
|
|
|
|
|
|
/* simply recalculate all periodics */ |
|
|
|
/* TODO: maybe ensure that at least one event happens when jumping forward? */ |
|
|
|
static void noinline ecb_cold |
|
|
|
noinline ecb_cold |
|
|
|
static void |
|
|
|
periodics_reschedule (EV_P) |
|
|
|
{ |
|
|
|
int i; |
|
|
@ -3447,7 +3475,8 @@ periodics_reschedule (EV_P) |
|
|
|
#endif |
|
|
|
|
|
|
|
/* adjust all timers by a given offset */ |
|
|
|
static void noinline ecb_cold |
|
|
|
noinline ecb_cold |
|
|
|
static void |
|
|
|
timers_reschedule (EV_P_ ev_tstamp adjust) |
|
|
|
{ |
|
|
|
int i; |
|
|
@ -3825,7 +3854,8 @@ ev_stop (EV_P_ W w) |
|
|
|
|
|
|
|
/*****************************************************************************/ |
|
|
|
|
|
|
|
void noinline |
|
|
|
noinline |
|
|
|
void |
|
|
|
ev_io_start (EV_P_ ev_io *w) EV_THROW |
|
|
|
{ |
|
|
|
int fd = w->fd; |
|
|
@ -3851,7 +3881,8 @@ ev_io_start (EV_P_ ev_io *w) EV_THROW |
|
|
|
EV_FREQUENT_CHECK; |
|
|
|
} |
|
|
|
|
|
|
|
void noinline |
|
|
|
noinline |
|
|
|
void |
|
|
|
ev_io_stop (EV_P_ ev_io *w) EV_THROW |
|
|
|
{ |
|
|
|
clear_pending (EV_A_ (W)w); |
|
|
@ -3870,7 +3901,8 @@ ev_io_stop (EV_P_ ev_io *w) EV_THROW |
|
|
|
EV_FREQUENT_CHECK; |
|
|
|
} |
|
|
|
|
|
|
|
void noinline |
|
|
|
noinline |
|
|
|
void |
|
|
|
ev_timer_start (EV_P_ ev_timer *w) EV_THROW |
|
|
|
{ |
|
|
|
if (expect_false (ev_is_active (w))) |
|
|
@ -3894,7 +3926,8 @@ ev_timer_start (EV_P_ ev_timer *w) EV_THROW |
|
|
|
/*assert (("libev: internal timer heap corruption", timers [ev_active (w)] == (WT)w));*/ |
|
|
|
} |
|
|
|
|
|
|
|
void noinline |
|
|
|
noinline |
|
|
|
void |
|
|
|
ev_timer_stop (EV_P_ ev_timer *w) EV_THROW |
|
|
|
{ |
|
|
|
clear_pending (EV_A_ (W)w); |
|
|
@ -3924,7 +3957,8 @@ ev_timer_stop (EV_P_ ev_timer *w) EV_THROW |
|
|
|
EV_FREQUENT_CHECK; |
|
|
|
} |
|
|
|
|
|
|
|
void noinline |
|
|
|
noinline |
|
|
|
void |
|
|
|
ev_timer_again (EV_P_ ev_timer *w) EV_THROW |
|
|
|
{ |
|
|
|
EV_FREQUENT_CHECK; |
|
|
@ -3958,7 +3992,8 @@ ev_timer_remaining (EV_P_ ev_timer *w) EV_THROW |
|
|
|
} |
|
|
|
|
|
|
|
#if EV_PERIODIC_ENABLE |
|
|
|
void noinline |
|
|
|
noinline |
|
|
|
void |
|
|
|
ev_periodic_start (EV_P_ ev_periodic *w) EV_THROW |
|
|
|
{ |
|
|
|
if (expect_false (ev_is_active (w))) |
|
|
@ -3988,7 +4023,8 @@ ev_periodic_start (EV_P_ ev_periodic *w) EV_THROW |
|
|
|
/*assert (("libev: internal periodic heap corruption", ANHE_w (periodics [ev_active (w)]) == (WT)w));*/ |
|
|
|
} |
|
|
|
|
|
|
|
void noinline |
|
|
|
noinline |
|
|
|
void |
|
|
|
ev_periodic_stop (EV_P_ ev_periodic *w) EV_THROW |
|
|
|
{ |
|
|
|
clear_pending (EV_A_ (W)w); |
|
|
@ -4016,7 +4052,8 @@ ev_periodic_stop (EV_P_ ev_periodic *w) EV_THROW |
|
|
|
EV_FREQUENT_CHECK; |
|
|
|
} |
|
|
|
|
|
|
|
void noinline |
|
|
|
noinline |
|
|
|
void |
|
|
|
ev_periodic_again (EV_P_ ev_periodic *w) EV_THROW |
|
|
|
{ |
|
|
|
/* TODO: use adjustheap and recalculation */ |
|
|
@ -4031,7 +4068,8 @@ ev_periodic_again (EV_P_ ev_periodic *w) EV_THROW |
|
|
|
|
|
|
|
#if EV_SIGNAL_ENABLE |
|
|
|
|
|
|
|
void noinline |
|
|
|
noinline |
|
|
|
void |
|
|
|
ev_signal_start (EV_P_ ev_signal *w) EV_THROW |
|
|
|
{ |
|
|
|
if (expect_false (ev_is_active (w))) |
|
|
@ -4113,7 +4151,8 @@ ev_signal_start (EV_P_ ev_signal *w) EV_THROW |
|
|
|
EV_FREQUENT_CHECK; |
|
|
|
} |
|
|
|
|
|
|
|
void noinline |
|
|
|
noinline |
|
|
|
void |
|
|
|
ev_signal_stop (EV_P_ ev_signal *w) EV_THROW |
|
|
|
{ |
|
|
|
clear_pending (EV_A_ (W)w); |
|
|
@ -4199,14 +4238,15 @@ ev_child_stop (EV_P_ ev_child *w) EV_THROW |
|
|
|
#define NFS_STAT_INTERVAL 30.1074891 /* for filesystems potentially failing inotify */ |
|
|
|
#define MIN_STAT_INTERVAL 0.1074891 |
|
|
|
|
|
|
|
static void noinline stat_timer_cb (EV_P_ ev_timer *w_, int revents); |
|
|
|
noinline static void stat_timer_cb (EV_P_ ev_timer *w_, int revents); |
|
|
|
|
|
|
|
#if EV_USE_INOTIFY |
|
|
|
|
|
|
|
/* the * 2 is to allow for alignment padding, which for some reason is >> 8 */ |
|
|
|
# define EV_INOTIFY_BUFSIZE (sizeof (struct inotify_event) * 2 + NAME_MAX) |
|
|
|
|
|
|
|
static void noinline |
|
|
|
noinline |
|
|
|
static void |
|
|
|
infy_add (EV_P_ ev_stat *w) |
|
|
|
{ |
|
|
|
w->wd = inotify_add_watch (fs_fd, w->path, |
|
|
@ -4280,7 +4320,8 @@ infy_add (EV_P_ ev_stat *w) |
|
|
|
if (ev_is_active (&w->timer)) ev_unref (EV_A); |
|
|
|
} |
|
|
|
|
|
|
|
static void noinline |
|
|
|
noinline |
|
|
|
static void |
|
|
|
infy_del (EV_P_ ev_stat *w) |
|
|
|
{ |
|
|
|
int slot; |
|
|
@ -4297,7 +4338,8 @@ infy_del (EV_P_ ev_stat *w) |
|
|
|
inotify_rm_watch (fs_fd, wd); |
|
|
|
} |
|
|
|
|
|
|
|
static void noinline |
|
|
|
noinline |
|
|
|
static void |
|
|
|
infy_wd (EV_P_ int slot, int wd, struct inotify_event *ev) |
|
|
|
{ |
|
|
|
if (slot < 0) |
|
|
@ -4343,7 +4385,8 @@ infy_cb (EV_P_ ev_io *w, int revents) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
inline_size void ecb_cold |
|
|
|
inline_size ecb_cold |
|
|
|
void |
|
|
|
ev_check_2625 (EV_P) |
|
|
|
{ |
|
|
|
/* kernels < 2.6.25 are borked |
|
|
@ -4451,7 +4494,8 @@ ev_stat_stat (EV_P_ ev_stat *w) EV_THROW |
|
|
|
w->attr.st_nlink = 1; |
|
|
|
} |
|
|
|
|
|
|
|
static void noinline |
|
|
|
noinline |
|
|
|
static void |
|
|
|
stat_timer_cb (EV_P_ ev_timer *w_, int revents) |
|
|
|
{ |
|
|
|
ev_stat *w = (ev_stat *)(((char *)w_) - offsetof (ev_stat, timer)); |
|
|
@ -4671,7 +4715,8 @@ ev_check_stop (EV_P_ ev_check *w) EV_THROW |
|
|
|
#endif |
|
|
|
|
|
|
|
#if EV_EMBED_ENABLE |
|
|
|
void noinline |
|
|
|
noinline |
|
|
|
void |
|
|
|
ev_embed_sweep (EV_P_ ev_embed *w) EV_THROW |
|
|
|
{ |
|
|
|
ev_run (w->other, EVRUN_NOWAIT); |
|
|
@ -4978,7 +5023,8 @@ ev_once (EV_P_ int fd, int events, ev_tstamp timeout, void (*cb)(int revents, vo |
|
|
|
/*****************************************************************************/ |
|
|
|
|
|
|
|
#if EV_WALK_ENABLE |
|
|
|
void ecb_cold |
|
|
|
ecb_cold |
|
|
|
void |
|
|
|
ev_walk (EV_P_ int types, void (*cb)(EV_P_ int type, void *w)) EV_THROW |
|
|
|
{ |
|
|
|
int i, j; |
|
|
|