From fba9dbfff2d57fa7b0fca7b4d033e1df87f003b1 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 9 Nov 2007 23:04:35 +0000 Subject: *** empty log message *** --- ev.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/ev.c b/ev.c index 00edbd2..14046a2 100644 --- a/ev.c +++ b/ev.c @@ -520,6 +520,18 @@ downheap (WT *heap, int N, int k) ((W)heap [k])->active = k + 1; } +inline void +adjustheap (WT *heap, int N, int k, ev_tstamp at) +{ + ev_tstamp old_at = heap [k]->at; + heap [k]->at = at; + + if (old_at < at) + downheap (heap, N, k); + else + upheap (heap, k); +} + /*****************************************************************************/ typedef struct @@ -1323,10 +1335,7 @@ ev_timer_again (EV_P_ struct ev_timer *w) if (ev_is_active (w)) { if (w->repeat) - { - ((WT)w)->at = mn_now + w->repeat; - downheap ((WT *)timers, timercnt, ((W)w)->active - 1); - } + adjustheap ((WT *)timers, timercnt, ((W)w)->active - 1, mn_now + w->repeat); else ev_timer_stop (EV_A_ w); } @@ -1378,6 +1387,7 @@ ev_periodic_stop (EV_P_ struct ev_periodic *w) void ev_periodic_again (EV_P_ struct ev_periodic *w) { + /* TODO: use adjustheap and recalculation */ ev_periodic_stop (EV_A_ w); ev_periodic_start (EV_A_ w); } -- cgit v1.2.3