--- libev/ev.c 2007/11/01 08:10:03 1.29 +++ libev/ev.c 2007/11/01 08:28:33 1.30 @@ -115,8 +115,7 @@ 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 @@ int newcnt = cur; \ do \ { \ - newcnt = array_nextsize (newcnt); \ + newcnt = array_roundsize (base, newcnt << 1); \ } \ while ((cnt) > newcnt); \ \ @@ -167,13 +166,10 @@ 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 @@ { struct ev_timer *w = timers [0]; - event ((W)w, EV_TIMEOUT); - /* first reschedule or stop timer */ if (w->repeat) { @@ -542,6 +536,8 @@ } else ev_timer_stop (w); /* nonrepeating: stop timer */ + + event ((W)w, EV_TIMEOUT); } }