Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Bug fix : we could get stuck into an infinite loop for floating point precision reason.
[simgrid.git] / src / surf / surf.c
index 171b66a..82cf6db 100644 (file)
@@ -20,14 +20,22 @@ lmm_system_t maxmin_system = NULL;
 xbt_dynar_t surf_path = NULL;
 
 double generic_maxmin_share_resources(xbt_swag_t running_actions,
-                                     size_t offset)
+                                      size_t offset)
+{
+  return  generic_maxmin_share_resources2(running_actions, offset,
+                                         maxmin_system);
+}
+
+double generic_maxmin_share_resources2(xbt_swag_t running_actions,
+                                      size_t offset,
+                                      lmm_system_t sys)
 {
   surf_action_t action = NULL;
   double min = -1;
   double value = -1;
 #define VARIABLE(action) (*((lmm_variable_t*)(((char *) (action)) + (offset))))
 
-  lmm_solve(maxmin_system);
+  lmm_solve(sys);
 
   xbt_swag_foreach(action, running_actions) {
     value = lmm_variable_getvalue(VARIABLE(action));
@@ -148,12 +156,12 @@ void surf_init(int *argc, char **argv)
     maxmin_system = lmm_system_new();
 }
 
+static char* path_name = NULL;
 FILE *surf_fopen(const char *name, const char *mode)
 {
   int i; 
   char* path = NULL;
   FILE *file = NULL;
-  static char* path_name = NULL;
 
   xbt_assert0(surf_path,"surf_init has to be called before using surf_fopen");
   if(!path_name) path_name=xbt_new0(char,strlen(name)+1);
@@ -190,8 +198,15 @@ void surf_finalize(void)
   if (resource_list)
     xbt_dynar_free(&resource_list);
 
+  if(surf_path) 
+    xbt_dynar_free(&surf_path);
+
   tmgr_finalize();
   surf_parse_lex_destroy();
+  if(path_name) {
+    xbt_free(path_name);
+    path_name = NULL;
+  }
 }
 
 double surf_solve(void)