summaryrefslogtreecommitdiff
path: root/ev.c
diff options
context:
space:
mode:
authorroot <root>2010-03-16 00:20:16 +0000
committerroot <root>2010-03-16 00:20:16 +0000
commit42a515683c8434c476de42b87c0f327e459810dc (patch)
tree68d87da256195ad457e0f3eb578bdcbfc9a74ef9 /ev.c
parenta3420a0912b8b89ae21d18116ece126b06cef1f8 (diff)
rough EV_FEATURES implementation
Diffstat (limited to 'ev.c')
-rw-r--r--ev.c80
1 files changed, 36 insertions, 44 deletions
diff --git a/ev.c b/ev.c
index 85d0c47..fe94048 100644
--- a/ev.c
+++ b/ev.c
@@ -221,7 +221,7 @@ extern "C" {
#ifndef EV_USE_CLOCK_SYSCALL
# if __linux && __GLIBC__ >= 2
-# define EV_USE_CLOCK_SYSCALL 1
+# define EV_USE_CLOCK_SYSCALL EV_FEATURE_OS
# else
# define EV_USE_CLOCK_SYSCALL 0
# endif
@@ -229,7 +229,7 @@ extern "C" {
#ifndef EV_USE_MONOTONIC
# if defined (_POSIX_MONOTONIC_CLOCK) && _POSIX_MONOTONIC_CLOCK >= 0
-# define EV_USE_MONOTONIC 1
+# define EV_USE_MONOTONIC EV_FEATURE_OS
# else
# define EV_USE_MONOTONIC 0
# endif
@@ -241,27 +241,27 @@ extern "C" {
#ifndef EV_USE_NANOSLEEP
# if _POSIX_C_SOURCE >= 199309L
-# define EV_USE_NANOSLEEP 1
+# define EV_USE_NANOSLEEP EV_FEATURE_OS
# else
# define EV_USE_NANOSLEEP 0
# endif
#endif
#ifndef EV_USE_SELECT
-# define EV_USE_SELECT 1
+# define EV_USE_SELECT EV_FEATURE_BACKENDS
#endif
#ifndef EV_USE_POLL
# ifdef _WIN32
# define EV_USE_POLL 0
# else
-# define EV_USE_POLL 1
+# define EV_USE_POLL EV_FEATURE_BACKENDS
# endif
#endif
#ifndef EV_USE_EPOLL
# if __linux && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 4))
-# define EV_USE_EPOLL 1
+# define EV_USE_EPOLL EV_FEATURE_BACKENDS
# else
# define EV_USE_EPOLL 0
# endif
@@ -277,31 +277,23 @@ extern "C" {
#ifndef EV_USE_INOTIFY
# if __linux && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 4))
-# define EV_USE_INOTIFY 1
+# define EV_USE_INOTIFY EV_FEATURE_OS
# else
# define EV_USE_INOTIFY 0
# endif
#endif
#ifndef EV_PID_HASHSIZE
-# if EV_MINIMAL
-# define EV_PID_HASHSIZE 1
-# else
-# define EV_PID_HASHSIZE 16
-# endif
+# define EV_PID_HASHSIZE EV_FEATURE_DATA ? 16 : 1
#endif
#ifndef EV_INOTIFY_HASHSIZE
-# if EV_MINIMAL
-# define EV_INOTIFY_HASHSIZE 1
-# else
-# define EV_INOTIFY_HASHSIZE 16
-# endif
+# define EV_INOTIFY_HASHSIZE EV_FEATURE_DATA ? 16 : 1
#endif
#ifndef EV_USE_EVENTFD
# if __linux && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 7))
-# define EV_USE_EVENTFD 1
+# define EV_USE_EVENTFD EV_FEATURE_OS
# else
# define EV_USE_EVENTFD 0
# endif
@@ -309,7 +301,7 @@ extern "C" {
#ifndef EV_USE_SIGNALFD
# if __linux && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 7))
-# define EV_USE_SIGNALFD 1
+# define EV_USE_SIGNALFD EV_FEATURE_OS
# else
# define EV_USE_SIGNALFD 0
# endif
@@ -322,15 +314,15 @@ extern "C" {
#endif
#ifndef EV_VERIFY
-# define EV_VERIFY !EV_MINIMAL
+# define EV_VERIFY (EV_FEATURE_API ? 1 : 0)
#endif
#ifndef EV_USE_4HEAP
-# define EV_USE_4HEAP !EV_MINIMAL
+# define EV_USE_4HEAP EV_FEATURE_DATA
#endif
#ifndef EV_HEAP_CACHE_AT
-# define EV_HEAP_CACHE_AT !EV_MINIMAL
+# define EV_HEAP_CACHE_AT EV_FEATURE_DATA
#endif
/* on linux, we can use a (slow) syscall to avoid a dependency on pthread, */
@@ -478,10 +470,10 @@ struct signalfd_siginfo
#define expect_true(expr) expect ((expr) != 0, 1)
#define inline_size static inline
-#if EV_MINIMAL
-# define inline_speed static noinline
-#else
+#if EV_FEATURE_CODE
# define inline_speed static inline
+#else
+# define inline_speed static noinline
#endif
#define NUMPRI (EV_MAXPRI - EV_MINPRI + 1)
@@ -698,7 +690,7 @@ typedef struct
#endif
-#if EV_MINIMAL < 2
+#if EV_FEATURE_API
# define EV_RELEASE_CB if (expect_false (release_cb)) release_cb (EV_A)
# define EV_ACQUIRE_CB if (expect_false (acquire_cb)) acquire_cb (EV_A)
# define EV_INVOKE_PENDING invoke_cb (EV_A)
@@ -1405,7 +1397,7 @@ child_reap (EV_P_ int chain, int pid, int status)
ev_child *w;
int traced = WIFSTOPPED (status) || WIFCONTINUED (status);
- for (w = (ev_child *)childs [chain & (EV_PID_HASHSIZE - 1)]; w; w = (ev_child *)((WL)w)->next)
+ for (w = (ev_child *)childs [chain & ((EV_PID_HASHSIZE) - 1)]; w; w = (ev_child *)((WL)w)->next)
{
if ((w->pid == pid || !w->pid)
&& (!traced || (w->flags & 1)))
@@ -1440,7 +1432,7 @@ childcb (EV_P_ ev_signal *sw, int revents)
ev_feed_event (EV_A_ (W)sw, EV_SIGNAL);
child_reap (EV_A_ pid, pid, status);
- if (EV_PID_HASHSIZE > 1)
+ if ((EV_PID_HASHSIZE) > 1)
child_reap (EV_A_ 0, pid, status); /* this might trigger a watcher twice, but feed_event catches that */
}
@@ -1539,7 +1531,7 @@ ev_backend (EV_P)
return backend;
}
-#if EV_MINIMAL < 2
+#if EV_FEATURE_API
unsigned int
ev_loop_count (EV_P)
{
@@ -1629,7 +1621,7 @@ loop_init (EV_P_ unsigned int flags)
mn_now = get_clock ();
now_floor = mn_now;
rtmn_diff = ev_rt_now - mn_now;
-#if EV_MINIMAL < 2
+#if EV_FEATURE_API
invoke_cb = ev_invoke_pending;
#endif
@@ -1876,7 +1868,7 @@ array_verify (EV_P_ W *ws, int cnt)
}
#endif
-#if EV_MINIMAL < 2
+#if EV_FEATURE_API
void
ev_loop_verify (EV_P)
{
@@ -1939,7 +1931,7 @@ ev_loop_verify (EV_P)
# if 0
#if EV_CHILD_ENABLE
- for (w = (ev_child *)childs [chain & (EV_PID_HASHSIZE - 1)]; w; w = (ev_child *)((WL)w)->next)
+ for (w = (ev_child *)childs [chain & ((EV_PID_HASHSIZE) - 1)]; w; w = (ev_child *)((WL)w)->next)
for (signum = EV_NSIG; signum--; ) if (signals [signum].pending)
#endif
# endif
@@ -2277,7 +2269,7 @@ time_update (EV_P_ ev_tstamp max_block)
void
ev_loop (EV_P_ int flags)
{
-#if EV_MINIMAL < 2
+#if EV_FEATURE_API
++loop_depth;
#endif
@@ -2380,7 +2372,7 @@ ev_loop (EV_P_ int flags)
}
}
-#if EV_MINIMAL < 2
+#if EV_FEATURE_API
++loop_count;
#endif
assert ((loop_done = EVUNLOOP_RECURSE, 1)); /* assert for side effect */
@@ -2419,7 +2411,7 @@ ev_loop (EV_P_ int flags)
if (loop_done == EVUNLOOP_ONE)
loop_done = EVUNLOOP_CANCEL;
-#if EV_MINIMAL < 2
+#if EV_FEATURE_API
--loop_depth;
#endif
}
@@ -2879,7 +2871,7 @@ ev_child_start (EV_P_ ev_child *w)
EV_FREQUENT_CHECK;
ev_start (EV_A_ (W)w, 1);
- wlist_add (&childs [w->pid & (EV_PID_HASHSIZE - 1)], (WL)w);
+ wlist_add (&childs [w->pid & ((EV_PID_HASHSIZE) - 1)], (WL)w);
EV_FREQUENT_CHECK;
}
@@ -2893,7 +2885,7 @@ ev_child_stop (EV_P_ ev_child *w)
EV_FREQUENT_CHECK;
- wlist_del (&childs [w->pid & (EV_PID_HASHSIZE - 1)], (WL)w);
+ wlist_del (&childs [w->pid & ((EV_PID_HASHSIZE) - 1)], (WL)w);
ev_stop (EV_A_ (W)w);
EV_FREQUENT_CHECK;
@@ -2976,7 +2968,7 @@ infy_add (EV_P_ ev_stat *w)
}
if (w->wd >= 0)
- wlist_add (&fs_hash [w->wd & (EV_INOTIFY_HASHSIZE - 1)].head, (WL)w);
+ wlist_add (&fs_hash [w->wd & ((EV_INOTIFY_HASHSIZE) - 1)].head, (WL)w);
/* now re-arm timer, if required */
if (ev_is_active (&w->timer)) ev_ref (EV_A);
@@ -2994,7 +2986,7 @@ infy_del (EV_P_ ev_stat *w)
return;
w->wd = -2;
- slot = wd & (EV_INOTIFY_HASHSIZE - 1);
+ slot = wd & ((EV_INOTIFY_HASHSIZE) - 1);
wlist_del (&fs_hash [slot].head, (WL)w);
/* remove this watcher, if others are watching it, they will rearm */
@@ -3006,13 +2998,13 @@ infy_wd (EV_P_ int slot, int wd, struct inotify_event *ev)
{
if (slot < 0)
/* overflow, need to check for all hash slots */
- for (slot = 0; slot < EV_INOTIFY_HASHSIZE; ++slot)
+ for (slot = 0; slot < (EV_INOTIFY_HASHSIZE); ++slot)
infy_wd (EV_A_ slot, wd, ev);
else
{
WL w_;
- for (w_ = fs_hash [slot & (EV_INOTIFY_HASHSIZE - 1)].head; w_; )
+ for (w_ = fs_hash [slot & ((EV_INOTIFY_HASHSIZE) - 1)].head; w_; )
{
ev_stat *w = (ev_stat *)w_;
w_ = w_->next; /* lets us remove this watcher and all before it */
@@ -3021,7 +3013,7 @@ infy_wd (EV_P_ int slot, int wd, struct inotify_event *ev)
{
if (ev->mask & (IN_IGNORED | IN_UNMOUNT | IN_DELETE_SELF))
{
- wlist_del (&fs_hash [slot & (EV_INOTIFY_HASHSIZE - 1)].head, (WL)w);
+ wlist_del (&fs_hash [slot & ((EV_INOTIFY_HASHSIZE) - 1)].head, (WL)w);
w->wd = -1;
infy_add (EV_A_ w); /* re-add, no matter what */
}
@@ -3145,7 +3137,7 @@ infy_fork (EV_P)
ev_unref (EV_A);
}
- for (slot = 0; slot < EV_INOTIFY_HASHSIZE; ++slot)
+ for (slot = 0; slot < (EV_INOTIFY_HASHSIZE); ++slot)
{
WL w_ = fs_hash [slot].head;
fs_hash [slot].head = 0;
@@ -3771,7 +3763,7 @@ ev_walk (EV_P_ int types, void (*cb)(EV_P_ int type, void *w))
#if EV_CHILD_ENABLE
if (types & EV_CHILD)
- for (i = EV_PID_HASHSIZE; i--; )
+ for (i = (EV_PID_HASHSIZE); i--; )
for (wl = childs [i]; wl; )
{
wn = wl->next;