]> git.llucax.com Git - software/libev.git/blobdiff - ev.c
*** empty log message ***
[software/libev.git] / ev.c
diff --git a/ev.c b/ev.c
index 3e008a4bce0b0d60d9f9938ccec2f6af9f881b45..5124b2b742d00368d9c77b076c6a8597803aecee 100644 (file)
--- a/ev.c
+++ b/ev.c
@@ -235,6 +235,7 @@ typedef struct
   struct ev_loop
   {
     ev_tstamp ev_rt_now;
   struct ev_loop
   {
     ev_tstamp ev_rt_now;
+    #define ev_rt_now ((loop)->ev_rt_now)
     #define VAR(name,decl) decl;
       #include "ev_vars.h"
     #undef VAR
     #define VAR(name,decl) decl;
       #include "ev_vars.h"
     #undef VAR
@@ -536,15 +537,10 @@ downheap (WT *heap, int N, int k)
 }
 
 inline void
 }
 
 inline void
-adjustheap (WT *heap, int N, int k, ev_tstamp at)
+adjustheap (WT *heap, int N, int k)
 {
 {
-  ev_tstamp old_at = heap [k]->at;
-  heap [k]->at = at;
-
-  if (old_at < at)
-    downheap (heap, N, k);
-  else
-    upheap (heap, k);
+  upheap (heap, k);
+  downheap (heap, N, k);
 }
 
 /*****************************************************************************/
 }
 
 /*****************************************************************************/
@@ -1354,7 +1350,7 @@ ev_timer_stop (EV_P_ struct ev_timer *w)
   if (((W)w)->active < timercnt--)
     {
       timers [((W)w)->active - 1] = timers [timercnt];
   if (((W)w)->active < timercnt--)
     {
       timers [((W)w)->active - 1] = timers [timercnt];
-      downheap ((WT *)timers, timercnt, ((W)w)->active - 1);
+      adjustheap ((WT *)timers, timercnt, ((W)w)->active - 1);
     }
 
   ((WT)w)->at -= mn_now;
     }
 
   ((WT)w)->at -= mn_now;
@@ -1368,7 +1364,10 @@ ev_timer_again (EV_P_ struct ev_timer *w)
   if (ev_is_active (w))
     {
       if (w->repeat)
   if (ev_is_active (w))
     {
       if (w->repeat)
-        adjustheap ((WT *)timers, timercnt, ((W)w)->active - 1, mn_now + w->repeat);
+        {
+          ((WT)w)->at = mn_now + w->repeat;
+          adjustheap ((WT *)timers, timercnt, ((W)w)->active - 1);
+        }
       else
         ev_timer_stop (EV_A_ w);
     }
       else
         ev_timer_stop (EV_A_ w);
     }
@@ -1412,7 +1411,7 @@ ev_periodic_stop (EV_P_ struct ev_periodic *w)
   if (((W)w)->active < periodiccnt--)
     {
       periodics [((W)w)->active - 1] = periodics [periodiccnt];
   if (((W)w)->active < periodiccnt--)
     {
       periodics [((W)w)->active - 1] = periodics [periodiccnt];
-      downheap ((WT *)periodics, periodiccnt, ((W)w)->active - 1);
+      adjustheap ((WT *)periodics, periodiccnt, ((W)w)->active - 1);
     }
 
   ev_stop (EV_A_ (W)w);
     }
 
   ev_stop (EV_A_ (W)w);
@@ -1442,7 +1441,7 @@ void
 ev_idle_stop (EV_P_ struct ev_idle *w)
 {
   ev_clear_pending (EV_A_ (W)w);
 ev_idle_stop (EV_P_ struct ev_idle *w)
 {
   ev_clear_pending (EV_A_ (W)w);
-  if (ev_is_active (w))
+  if (!ev_is_active (w))
     return;
 
   idles [((W)w)->active - 1] = idles [--idlecnt];
     return;
 
   idles [((W)w)->active - 1] = idles [--idlecnt];
@@ -1464,7 +1463,7 @@ void
 ev_prepare_stop (EV_P_ struct ev_prepare *w)
 {
   ev_clear_pending (EV_A_ (W)w);
 ev_prepare_stop (EV_P_ struct ev_prepare *w)
 {
   ev_clear_pending (EV_A_ (W)w);
-  if (ev_is_active (w))
+  if (!ev_is_active (w))
     return;
 
   prepares [((W)w)->active - 1] = prepares [--preparecnt];
     return;
 
   prepares [((W)w)->active - 1] = prepares [--preparecnt];