Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Added round trip time contraint to the SDP program, this parameter
[simgrid.git] / src / surf / surf_timer.c
index 35ddfa8..c86ddfe 100644 (file)
@@ -8,13 +8,14 @@
 #include "xbt/ex.h"
 #include "surf_timer_private.h"
 
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(timer, surf,
-                               "Logging specific to the SURF timer module");
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_timer, surf,
+                               "Logging specific to SURF (timer)");
 
 surf_timer_resource_t surf_timer_resource = NULL;
 static tmgr_trace_t empty_trace = NULL;
 static xbt_swag_t command_pending = NULL;
 static xbt_swag_t command_to_run = NULL;
+static xbt_heap_t timer_heap = NULL;
 
 static void timer_free(void *timer)
 {
@@ -96,11 +97,19 @@ static void action_change_state(surf_action_t action,
 
 static double share_resources(double now)
 {
-  return -1.0;
+  if (xbt_heap_size(timer_heap))
+    return (xbt_heap_maxkey(timer_heap));
+  else
+    return -1.0;
 }
 
 static void update_actions_state(double now, double delta)
 {
+  if(xbt_heap_size(timer_heap)) {
+    if(xbt_heap_maxkey(timer_heap)<=now+delta) {
+      xbt_heap_pop(timer_heap);
+    }
+  }
   return;
 }
 
@@ -124,6 +133,7 @@ static void set(double date, void *function, void *arg)
   command = command_new(function, arg);
 
   tmgr_history_add_trace(history, empty_trace, date, 0, command);  
+  xbt_heap_push(timer_heap, NULL , date);
 }
 
 
@@ -159,6 +169,12 @@ static int action_is_suspended(surf_action_t action)
 
 static void finalize(void)
 {
+  xbt_heap_free(timer_heap);
+  timer_heap = NULL;
+
+  tmgr_trace_free(empty_trace);
+  empty_trace = NULL;
+
   xbt_swag_free(command_pending);
   xbt_swag_free(command_to_run);
 
@@ -232,6 +248,7 @@ static void surf_timer_resource_init_internal(void)
   }
 
   empty_trace = tmgr_empty_trace_new();
+  timer_heap = xbt_heap_new(8, NULL);
 
   xbt_assert0(maxmin_system, "surf_init has to be called first!");
 }