Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Reintenting (sorry), plus do the list managment operation before calling the user...
authormquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Sun, 16 Jul 2006 18:49:26 +0000 (18:49 +0000)
committermquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Sun, 16 Jul 2006 18:49:26 +0000 (18:49 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@2596 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/gras/Msg/timer.c

index 513b289..63b6ce0 100644 (file)
@@ -150,22 +150,23 @@ double gras_msg_timer_handle(void) {
      DEBUG2("Action %p expires in %f", timer->action, untilthis);
      
      if (untilthis <= 0.0) {
+       void_f_void_t action = timer->action;
        
-       DEBUG5("[%.0f] Serve %s action %p (%f<%f)",gras_os_time(),
+       DEBUG5("[%.0f] Serve %s action %p (%f<%f)",gras_os_time(),
              timer->repeat ? "repetitive" : "delayed", timer->action,
              timer->expiry, now);
-       timer->action();
        
-       if (timer->repeat) {    
-          timer->expiry = now + timer->period;
-          DEBUG4("[%.0f] Re-arm repetitive action %p for %f (period=%f)",
-                gras_os_time(),
-                timer->action, timer->expiry, timer->period);
-       } else {
-          DEBUG2("[%.0f] Remove %p now that it's done", gras_os_time(), timer->action);
-          xbt_dynar_cursor_rm(pd->timers, &cursor);
-       }
-       return 0.0;
+       if (timer->repeat) {    
+        timer->expiry = now + timer->period;
+        DEBUG4("[%.0f] Re-arm repetitive action %p for %f (period=%f)",
+               gras_os_time(),
+               timer->action, timer->expiry, timer->period);
+       } else {
+        DEBUG2("[%.0f] Remove %p now that it's done", gras_os_time(), timer->action);
+        xbt_dynar_cursor_rm(pd->timers, &cursor);
+       }
+       action();
+       return 0.0;
      } else if (untilthis < untilnext || untilnext == -1) {
        untilnext = untilthis;
      }