diff options
-rw-r--r-- | ev.c | 21 | ||||
-rw-r--r-- | ev.h | 1 |
2 files changed, 21 insertions, 1 deletions
@@ -540,7 +540,7 @@ void ev_loop (int flags) if (timercnt) { - ev_tstamp to = timers [0]->at - get_clock () + method_fudge; + ev_tstamp to = timers [0]->at - (have_monotonic ? get_clock () : ev_now) + method_fudge; if (block > to) block = to; } @@ -679,10 +679,29 @@ evtimer_stop (struct ev_timer *w) downheap ((WT *)timers, timercnt, w->active - 1); } + w->at = w->repeat; + ev_stop ((W)w); } void +evtimer_again (struct ev_timer *w) +{ + if (ev_is_active (w)) + { + if (w->repeat) + { + w->at = now + w->repeat; + downheap ((WT *)timers, timercnt, w->active - 1); + } + else + evtimer_stop (w); + } + else if (w->repeat) + evtimer_start (w); +} + +void evperiodic_start (struct ev_periodic *w) { if (ev_is_active (w)) @@ -146,6 +146,7 @@ void evio_stop (struct ev_io *w); void evtimer_start (struct ev_timer *w); void evtimer_stop (struct ev_timer *w); +void evtimer_again (struct ev_timer *w); /* stops if active and no repeat, restarts if active and repeating, starts if inactive and repeating */ void evperiodic_start (struct ev_periodic *w); void evperiodic_stop (struct ev_periodic *w); |