|
|
@ -42,6 +42,8 @@ static ev_tstamp method_fudge; /* stupid epoll-returns-early bug */ |
|
|
|
static void (*method_modify)(int fd, int oev, int nev); |
|
|
|
static void (*method_poll)(ev_tstamp timeout); |
|
|
|
|
|
|
|
/*****************************************************************************/ |
|
|
|
|
|
|
|
ev_tstamp |
|
|
|
ev_time (void) |
|
|
|
{ |
|
|
@ -81,6 +83,8 @@ get_clock (void) |
|
|
|
cur = newcnt; \ |
|
|
|
} |
|
|
|
|
|
|
|
/*****************************************************************************/ |
|
|
|
|
|
|
|
typedef struct |
|
|
|
{ |
|
|
|
struct ev_io *head; |
|
|
@ -137,6 +141,8 @@ fd_event (int fd, int events) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/*****************************************************************************/ |
|
|
|
|
|
|
|
static struct ev_timer **atimers; |
|
|
|
static int atimermax, atimercnt; |
|
|
|
|
|
|
@ -184,6 +190,8 @@ downheap (struct ev_timer **timers, int N, int k) |
|
|
|
timers [k]->active = k + 1; |
|
|
|
} |
|
|
|
|
|
|
|
/*****************************************************************************/ |
|
|
|
|
|
|
|
typedef struct |
|
|
|
{ |
|
|
|
struct ev_signal *head; |
|
|
@ -253,6 +261,8 @@ siginit (void) |
|
|
|
evio_start (&sigev); |
|
|
|
} |
|
|
|
|
|
|
|
/*****************************************************************************/ |
|
|
|
|
|
|
|
#if HAVE_EPOLL |
|
|
|
# include "ev_epoll.c" |
|
|
|
#endif |
|
|
@ -294,6 +304,8 @@ int ev_init (int flags) |
|
|
|
return ev_method; |
|
|
|
} |
|
|
|
|
|
|
|
/*****************************************************************************/ |
|
|
|
|
|
|
|
void ev_prefork (void) |
|
|
|
{ |
|
|
|
} |
|
|
@ -316,6 +328,29 @@ void ev_postfork_child (void) |
|
|
|
siginit (); |
|
|
|
} |
|
|
|
|
|
|
|
/*****************************************************************************/ |
|
|
|
|
|
|
|
static ev_hook hooks [EVHOOK_NUM]; |
|
|
|
|
|
|
|
void |
|
|
|
ev_hook_register (int type, ev_hook hook) |
|
|
|
{ |
|
|
|
hooks [type] = hook; |
|
|
|
} |
|
|
|
|
|
|
|
void |
|
|
|
ev_hook_unregister (int type, ev_hook hook) |
|
|
|
{ |
|
|
|
hooks [type] = 0; |
|
|
|
} |
|
|
|
|
|
|
|
static void |
|
|
|
hook_call (int type) |
|
|
|
{ |
|
|
|
if (hooks [type]) |
|
|
|
hooks [type] (); |
|
|
|
} |
|
|
|
|
|
|
|
static void |
|
|
|
fd_reify (void) |
|
|
|
{ |
|
|
@ -439,6 +474,8 @@ void ev_loop (int flags) |
|
|
|
|
|
|
|
do |
|
|
|
{ |
|
|
|
hook_call (EVHOOK_PREPOLL); |
|
|
|
|
|
|
|
/* update fd-related kernel structures */ |
|
|
|
fd_reify (); |
|
|
|
|
|
|
@ -469,6 +506,8 @@ void ev_loop (int flags) |
|
|
|
/* update ev_now, do magic */ |
|
|
|
time_update (); |
|
|
|
|
|
|
|
hook_call (EVHOOK_POSTPOLL); |
|
|
|
|
|
|
|
/* put pending timers into pendign queue and reschedule them */ |
|
|
|
/* absolute timers first */ |
|
|
|
timers_reify (atimers, atimercnt, ev_now); |
|
|
@ -480,6 +519,8 @@ void ev_loop (int flags) |
|
|
|
while (!ev_loop_done); |
|
|
|
} |
|
|
|
|
|
|
|
/*****************************************************************************/ |
|
|
|
|
|
|
|
static void |
|
|
|
wlist_add (struct ev_watcher_list **head, struct ev_watcher_list *elem) |
|
|
|
{ |
|
|
@ -519,6 +560,8 @@ ev_stop (struct ev_watcher *w) |
|
|
|
/* nop */ |
|
|
|
} |
|
|
|
|
|
|
|
/*****************************************************************************/ |
|
|
|
|
|
|
|
void |
|
|
|
evio_start (struct ev_io *w) |
|
|
|
{ |
|
|
@ -673,7 +716,7 @@ int main (void) |
|
|
|
|
|
|
|
struct ev_timer t[10000]; |
|
|
|
|
|
|
|
#if 0 |
|
|
|
#if 1 |
|
|
|
int i; |
|
|
|
for (i = 0; i < 10000; ++i) |
|
|
|
{ |
|
|
|