diff options
-rw-r--r-- | ev.c | 20 |
1 files changed, 8 insertions, 12 deletions
@@ -115,8 +115,7 @@ get_clock (void) return ev_time (); } -#define array_nextsize(n) (((n) << 1) | 4 & ~3) -#define array_prevsize(n) (((n) >> 1) | 4 & ~3) +#define array_roundsize(base,n) ((n) | 4 & ~3) #define array_needsize(base,cur,cnt,init) \ if ((cnt) > cur) \ @@ -124,7 +123,7 @@ get_clock (void) int newcnt = cur; \ do \ { \ - newcnt = array_nextsize (newcnt); \ + newcnt = array_roundsize (base, newcnt << 1); \ } \ while ((cnt) > newcnt); \ \ @@ -167,13 +166,10 @@ static int pendingmax, pendingcnt; static void event (W w, int events) { - if (w->active) - { - w->pending = ++pendingcnt; - array_needsize (pendings, pendingmax, pendingcnt, ); - pendings [pendingcnt - 1].w = w; - pendings [pendingcnt - 1].events = events; - } + w->pending = ++pendingcnt; + array_needsize (pendings, pendingmax, pendingcnt, ); + pendings [pendingcnt - 1].w = w; + pendings [pendingcnt - 1].events = events; } static void @@ -531,8 +527,6 @@ timers_reify (void) { struct ev_timer *w = timers [0]; - event ((W)w, EV_TIMEOUT); - /* first reschedule or stop timer */ if (w->repeat) { @@ -542,6 +536,8 @@ timers_reify (void) } else ev_timer_stop (w); /* nonrepeating: stop timer */ + + event ((W)w, EV_TIMEOUT); } } |