]> git.llucax.com Git - software/libev.git/commitdiff
*** empty log message ***
authorroot <root>
Tue, 11 Dec 2007 15:06:50 +0000 (15:06 +0000)
committerroot <root>
Tue, 11 Dec 2007 15:06:50 +0000 (15:06 +0000)
ev.c

diff --git a/ev.c b/ev.c
index f7aab9c5b34de76552781f9dd6a02d0e431c891d..f53e8ffdcdd81d1de57c6d9542fb1eaa7846cea0 100644 (file)
--- a/ev.c
+++ b/ev.c
@@ -223,8 +223,7 @@ extern "C" {
  * It is added to ev_rt_now when scheduling periodics
  * to ensure progress, time-wise, even when rounding
  * errors are against us.
- * This value is good at least till the year 4000
- * and intervals up to 20 years.
+ * This value is good at least till the year 4000.
  * Better solutions welcome.
  */
 #define TIME_EPSILON  0.0001220703125 /* 1/8192 */
@@ -1250,7 +1249,8 @@ periodics_reify (EV_P)
         }
       else if (w->interval)
         {
-          ((WT)w)->at = w->offset + floor ((ev_rt_now + TIME_EPSILON - w->offset) / w->interval + 1.) * w->interval;
+          ((WT)w)->at = w->offset + ceil ((ev_rt_now - w->offset) / w->interval) * w->interval;
+          if (((WT)w)->at - ev_rt_now <= TIME_EPSILON) ((WT)w)->at += w->interval;
           assert (("ev_periodic timeout in the past detected while processing timers, negative interval?", ((WT)w)->at > ev_rt_now));
           downheap ((WT *)periodics, periodiccnt, 0);
         }
@@ -1373,7 +1373,6 @@ time_update (EV_P)
 #if EV_PERIODIC_ENABLE
           periodics_reschedule (EV_A);
 #endif
-
           /* adjust timers. this is easy, as the offset is the same for all of them */
           for (i = 0; i < timercnt; ++i)
             ((WT)timers [i])->at += ev_rt_now - mn_now;