X-Git-Url: https://git.llucax.com/software/libev.git/blobdiff_plain/81183e5a23d6850ab2bc6a61d08daf7970f5a5cd..80f561c62ce8d30b87e4298b954ce280c4b5465f:/ev.c?ds=inline diff --git a/ev.c b/ev.c index 76dc021..000c369 100644 --- a/ev.c +++ b/ev.c @@ -989,7 +989,11 @@ timers_reify (EV_P) if (w->repeat) { assert (("negative ev_timer repeat value found while processing timers", w->repeat > 0.)); - ((WT)w)->at = mn_now + w->repeat; + + ((WT)w)->at += w->repeat; + if (((WT)w)->at < mn_now) + ((WT)w)->at = mn_now; + downheap ((WT *)timers, timercnt, 0); } else @@ -1294,6 +1298,8 @@ ev_io_stop (EV_P_ struct ev_io *w) if (!ev_is_active (w)) return; + assert (("ev_io_start called with illegal fd (must stay constant after start!)", w->fd >= 0 && w->fd < anfdmax)); + wlist_del ((WL *)&anfds[w->fd].head, (WL)w); ev_stop (EV_A_ (W)w); @@ -1333,7 +1339,7 @@ ev_timer_stop (EV_P_ struct ev_timer *w) downheap ((WT *)timers, timercnt, ((W)w)->active - 1); } - ((WT)w)->at = w->repeat; + ((WT)w)->at -= mn_now; ev_stop (EV_A_ (W)w); }