Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix a few memory leaks.
authorArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Wed, 20 Feb 2013 12:51:46 +0000 (13:51 +0100)
committerArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Wed, 20 Feb 2013 15:53:08 +0000 (16:53 +0100)
17 files changed:
examples/simdag/sd_avail.c
examples/simdag/sd_comm_throttling.c
examples/simdag/sd_fail.c
examples/simdag/sd_seq_access.c
examples/simdag/sd_typed_tasks_test.c
examples/simdag/simdag_trace.c
include/instr/jedule/jedule_sd_binding.h
src/instr/jedule/jedule_events.c
src/instr/jedule/jedule_output.c
src/instr/jedule/jedule_platform.c
src/instr/jedule/jedule_sd_binding.c
src/simdag/instr_sd_task.c
src/simdag/sd_global.c
src/simdag/sd_task.c
src/surf/workstation_ptask_L07.c
teshsuite/simdag/availability/availability_test.c
teshsuite/simdag/platforms/flatifier.c

index 096bc08..00d1aef 100644 (file)
@@ -102,7 +102,9 @@ int main(int argc, char **argv)
       if (SD_task_get_state(task)==SD_DONE)
         SD_task_destroy(task);
     }
+    xbt_dynar_free_container(&changed_tasks);
   }
+  xbt_dynar_free_container(&changed_tasks);
   SD_exit();
   return 0;
 }
index a2f9f8a..4a354ae 100644 (file)
@@ -77,7 +77,9 @@ int main(int argc, char **argv)
      */
     if (SD_task_get_state(taskC) == SD_DONE)
       SD_task_set_rate(taskD, 6.25);
+    xbt_dynar_free_container(&changed_tasks);
   }
+  xbt_dynar_free_container(&changed_tasks);
 
   XBT_DEBUG("Destroying tasks...");
 
index e383395..3ef49ee 100644 (file)
@@ -19,6 +19,8 @@ int main(int argc, char **argv)
   double computation_amount[1];
   double communication_amount[2] = { 0 };
   SD_workstation_t workstation_list[1];
+  xbt_dynar_t ret;
+
   /* initialization of SD */
   SD_init(&argc, argv);
 
@@ -37,7 +39,8 @@ int main(int argc, char **argv)
 
   SD_task_schedulel(task, 1, SD_workstation_get_by_name("Faulty Host"));
 
-  SD_simulate(-1.0);
+  ret = SD_simulate(-1.0);
+  xbt_dynar_free(&ret);
 
   SD_task_dump(task);
 
@@ -51,7 +54,8 @@ int main(int argc, char **argv)
   SD_task_schedulel(task, 1, SD_workstation_get_by_name("Safe Host"));
 
   XBT_INFO("Run the simulation again");
-  SD_simulate(-1.0);
+  ret = SD_simulate(-1.0);
+  xbt_dynar_free(&ret);
 
   SD_task_dump(task);
   XBT_INFO("Task '%s' start time: %f, finish time: %f",
@@ -77,7 +81,8 @@ int main(int argc, char **argv)
   SD_task_schedule(task, 1, workstation_list,
           computation_amount, communication_amount,-1);
 
-  SD_simulate(-1.0);
+  ret = SD_simulate(-1.0);
+  xbt_dynar_free(&ret);
 
   SD_task_dump(task);
 
@@ -95,7 +100,8 @@ int main(int argc, char **argv)
                    computation_amount, communication_amount,-1);
 
   XBT_INFO("Run the simulation again");
-  SD_simulate(-1.0);
+  ret = SD_simulate(-1.0);
+  xbt_dynar_free(&ret);
 
   SD_task_dump(task);
   XBT_INFO("Task '%s' start time: %f, finish time: %f",
index af97771..75ab65c 100644 (file)
@@ -83,7 +83,7 @@ int main(int argc, char **argv)
   while (!xbt_dynar_is_empty(changed_tasks = SD_simulate(-1.0))) {
     XBT_INFO(" Simulation was suspended, check workstation states"); 
     for (i = 0; i < 2; i++) {
-    SD_workstation_dump(workstations[i]);
+      SD_workstation_dump(workstations[i]);
     }
     xbt_dynar_free(&changed_tasks);
   }
@@ -94,6 +94,7 @@ int main(int argc, char **argv)
   SD_task_destroy(taskA);
   SD_task_destroy(taskB);
   SD_task_destroy(taskC);
+  SD_task_destroy(taskD);
 
   XBT_DEBUG("Tasks destroyed. Exiting SimDag...");
 
index 248c4d4..b8ccbfa 100644 (file)
@@ -92,7 +92,7 @@ int main(int argc, char **argv)
           SD_task_get_start_time(task), SD_task_get_finish_time(task));
     SD_task_destroy(task);
   }
-
+  xbt_dynar_free_container(&changed_tasks);
   SD_exit();
   return 0;
 }
index 7452e70..0cdc430 100644 (file)
@@ -124,6 +124,7 @@ int main(int argc, char **argv)
     }
     xbt_dynar_free_container(&changed_tasks);
   }
+  xbt_dynar_free_container(&changed_tasks);
 
   XBT_DEBUG("Destroying tasks...");
 
index cdd132b..74c3cb3 100644 (file)
@@ -24,6 +24,8 @@ void jedule_sd_init(void);
 
 void jedule_sd_cleanup(void);
 
+void jedule_sd_exit(void);
+
 void jedule_sd_dump(void);
 
 #endif /* JEDULE_SD_BINDING_H_ */
index 2edc234..489cdc7 100644 (file)
@@ -61,7 +61,7 @@ void create_jed_event(jed_event_t *event, char *name, double start_time,
 
   (*event)->type = xbt_strdup(type);
 
-  (*event)->resource_subsets = xbt_dynar_new(sizeof(jed_res_subset_t), NULL);
+  (*event)->resource_subsets = xbt_dynar_new(sizeof(jed_res_subset_t), xbt_free_ref);
   (*event)->characteristics_list = xbt_dynar_new(sizeof(char*), NULL);
   (*event)->info_hash = xbt_dict_new_homogeneous(NULL);
 
index 0099ce6..401b09b 100644 (file)
@@ -175,12 +175,12 @@ static void print_event(jed_event_t event) {
 
     int start = subset->start_idx;
     int end   = subset->start_idx + subset->nres - 1;
-        char resid[1024];
+    char resid[1024];
 
-        get_hierarchy_string(subset->parent, resid);
+    get_hierarchy_string(subset->parent, resid);
         
     fprintf(jed_file, "<select resources=\"");
-        fprintf(jed_file, "%s", resid);
+    fprintf(jed_file, "%s", resid);
     fprintf(jed_file, ".[%d-%d]", start, end);
     fprintf(jed_file, "\" />\n");
 
@@ -239,8 +239,14 @@ void write_jedule_output(FILE *file, jedule_t jedule,
   }
 }
 
+static void jed_event_free_ref(void *evp)
+{
+  jed_event_t ev = *(jed_event_t *)evp;
+  jed_event_free(ev);
+}
+
 void jedule_init_output() {
-  jedule_event_list = xbt_dynar_new(sizeof(jed_event_t), NULL);
+  jedule_event_list = xbt_dynar_new(sizeof(jed_event_t), jed_event_free_ref);
 }
 
 void jedule_cleanup_output() {
index b31fc7a..29eda01 100644 (file)
@@ -54,10 +54,11 @@ static void jed_free_container(jed_simgrid_container_t container) {
     xbt_dynar_foreach(container->container_children, iter, child_container) {
       jed_free_container(child_container);
     }
+    xbt_dynar_free(&container->container_children);
   }
 
-  free(container->name);
-  free(container);
+  xbt_free(container->name);
+  xbt_free(container);
 }
 
 void jed_simgrid_create_container(jed_simgrid_container_t *container, char *name) {
@@ -241,7 +242,7 @@ void jed_simgrid_get_resource_selection_by_hosts(xbt_dynar_t subset_list,
       // printf("subset parent >>> %s\n", parent->name);
       add_subsets_to(subset_list, hostgroup, parent);
     }
-
+    xbt_dynar_free(&hostgroup);
   }
 
   xbt_dict_free(&parent2hostgroup);
@@ -272,7 +273,7 @@ void jed_free_jedule(jedule_t jedule) {
   jed_free_container(jedule->root_container);
 
   xbt_dict_free(&jedule->jedule_meta_info);
-  free(jedule);
+  xbt_free(jedule);
 
   xbt_dict_free(&host2_simgrid_parent_container);
   xbt_dict_free(&container_name2container);
index f774263..b46cc9d 100644 (file)
@@ -71,13 +71,11 @@ static void create_hierarchy(AS_t current_comp,
 
     xbt_dynar_foreach(current_comp->index_network_elm, 
           dynar_cursor, network_elem) {
-      char *hostname;
-      hostname = strdup(network_elem->name);
-      xbt_dynar_push(hosts, &hostname);
+      xbt_dynar_push_as(hosts, char*, network_elem->name);
     }
 
     jed_simgrid_add_resources(current_container, hosts);
-
+    xbt_dynar_free(&hosts);
   } else {
     xbt_dict_foreach(current_comp->routing_sons, cursor, key, elem) {
       jed_simgrid_container_t child_container;
@@ -123,6 +121,12 @@ void jedule_sd_init() {
   jedule_init_output();
 }
 
+void jedule_sd_exit(void)
+{
+  jed_free_jedule(jedule);
+  jedule = NULL;
+}
+
 void jedule_sd_dump() {
   FILE *fh;
     char fname[1024];
index 409b3d9..5060997 100644 (file)
@@ -23,8 +23,7 @@ void TRACE_sd_set_task_category(SD_task_t task, const char *category){
   }
 
   //set task category
-  if (task->category)
-    xbt_free(task->category);
+  xbt_free(task->category);
   task->category = xbt_strdup (category);
   XBT_DEBUG("SD task %p(%s), category %s", task, task->name, task->category);
 }
index 233706a..896e758 100644 (file)
@@ -438,14 +438,15 @@ void SD_exit(void)
   TRACE_end();
 #endif
 
-  XBT_DEBUG("Exiting Surf...");
-  surf_exit();
-
   xbt_free(sd_global);
   sd_global = NULL;
 
 #ifdef HAVE_JEDULE
   jedule_sd_dump();
   jedule_sd_cleanup();
+  jedule_sd_exit();
 #endif
+
+  XBT_DEBUG("Exiting Surf...");
+  surf_exit();
 }
index 52c078e..af052fb 100644 (file)
@@ -1041,6 +1041,7 @@ void SD_task_unschedule(SD_task_t task)
       && ((task->kind == SD_TASK_COMP_PAR_AMDAHL) ||
           (task->kind == SD_TASK_COMM_PAR_MXN_1D_BLOCK))) { /* Don't free scheduling data for typed tasks */
     __SD_task_destroy_scheduling_data(task);
+    xbt_free(task->workstation_list);
     task->workstation_list=NULL;
     task->workstation_nb = 0;
   }
@@ -1418,8 +1419,7 @@ void SD_task_distribute_comp_amdhal(SD_task_t task, int ws_count)
               SD_task_get_name(task));  
   task->computation_amount = xbt_new0(double, ws_count);
   task->communication_amount = xbt_new0(double, ws_count * ws_count);
-  if (task->workstation_list)
-    xbt_free(task->workstation_list);
+  xbt_free(task->workstation_list);
   task->workstation_nb = ws_count;
   task->workstation_list = xbt_new0(SD_workstation_t, ws_count);
   
@@ -1569,11 +1569,8 @@ void SD_task_schedulev(SD_task_t task, int count,
                task->workstation_list[i];
 
           before->workstation_nb += count;
-          if (before->computation_amount)
-            xbt_free(before->computation_amount);
-          if (before->communication_amount)
-            xbt_free(before->communication_amount);
-
+          xbt_free(before->computation_amount);
+          xbt_free(before->communication_amount);
           before->computation_amount = xbt_new0(double,
                                                 before->workstation_nb);
           before->communication_amount = xbt_new0(double,
@@ -1638,10 +1635,8 @@ void SD_task_schedulev(SD_task_t task, int count,
 
           after->workstation_nb += count;
 
-          if (after->computation_amount)
-            xbt_free(after->computation_amount);
-          if (after->communication_amount)
-            xbt_free(after->communication_amount);
+          xbt_free(after->computation_amount);
+          xbt_free(after->communication_amount);
 
           after->computation_amount = xbt_new0(double, after->workstation_nb);
           after->communication_amount = xbt_new0(double,
index d689f68..3a63505 100644 (file)
@@ -134,6 +134,9 @@ static int ptask_action_unref(surf_action_t action)
     free(((surf_action_workstation_L07_t) action)->workstation_list);
     free(((surf_action_workstation_L07_t) action)->communication_amount);
     free(((surf_action_workstation_L07_t) action)->computation_amount);
+#ifdef HAVE_TRACING
+    xbt_free(action->category);
+#endif
     surf_action_free(&action);
     return 1;
   }
index 1fb03f4..8a397b6 100644 (file)
@@ -138,7 +138,8 @@ static xbt_dynar_t initDynamicThrottling(int *argc, char *argv[])
   fprintf(stdout, "Scheduling DAX...\n");
   scheduleDAX(dax);
   fprintf(stdout, "DAX scheduled\n");
-  SD_simulate(-1);
+  xbt_dynar_t ret = SD_simulate(-1);
+  xbt_dynar_free(&ret);
   fprintf(stdout, "Simulation end. Time: %f\n", SD_get_clock());
 
   return dax;
@@ -149,11 +150,11 @@ static xbt_dynar_t initDynamicThrottling(int *argc, char *argv[])
  */
 static void garbageCollector(xbt_dynar_t dax)
 {
-  SD_task_t task;
-  unsigned int cursor;
-  xbt_dynar_foreach(dax, cursor, task) {
+  while (!xbt_dynar_is_empty(dax)) {
+    SD_task_t task = xbt_dynar_pop_as(dax, SD_task_t);
     SD_task_destroy(task);
   }
+  xbt_dynar_free(&dax);
   SD_exit();
 }
 
index dad86de..5f5d48d 100644 (file)
@@ -275,6 +275,7 @@ int main(int argc, char **argv)
     printf("</platform>\n");
   }
   SD_exit();
+  xbt_os_timer_free(parse_time);
 
   return 0;
 }