]> git.llucax.com Git - software/libev.git/commitdiff
*** empty log message ***
authorroot <root>
Wed, 31 Oct 2007 11:52:12 +0000 (11:52 +0000)
committerroot <root>
Wed, 31 Oct 2007 11:52:12 +0000 (11:52 +0000)
ev.c
ev.h

diff --git a/ev.c b/ev.c
index a038613087c6da2e2839771cce12ded5df737832..96380ac4efefc7499a9482e8609370de22b6dca6 100644 (file)
--- a/ev.c
+++ b/ev.c
@@ -540,7 +540,7 @@ void ev_loop (int flags)
 
           if (timercnt)
             {
 
           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;
             }
 
               if (block > to) block = to;
             }
 
@@ -679,9 +679,28 @@ evtimer_stop (struct ev_timer *w)
       downheap ((WT *)timers, timercnt, w->active - 1);
     }
 
       downheap ((WT *)timers, timercnt, w->active - 1);
     }
 
+  w->at = w->repeat;
+
   ev_stop ((W)w);
 }
 
   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)
 {
 void
 evperiodic_start (struct ev_periodic *w)
 {
diff --git a/ev.h b/ev.h
index 7236712c97ede0736a0e795077d614794bbf9c5a..e4de49bce0d29d44e149456f9234309e7a07cba5 100644 (file)
--- a/ev.h
+++ b/ev.h
@@ -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_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);
 
 void evperiodic_start (struct ev_periodic *w);
 void evperiodic_stop  (struct ev_periodic *w);