Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
plug various memleaks
authormquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Thu, 15 Oct 2009 16:25:17 +0000 (16:25 +0000)
committermquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Thu, 15 Oct 2009 16:25:17 +0000 (16:25 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@6788 48e7efb5-ca39-0410-a469-dd3cf9ba447f

examples/simdag/dax/dax_test.c
src/simdag/sd_task.c

index d4093d5..04b2a7d 100644 (file)
@@ -85,7 +85,8 @@ int main(int argc, char **argv) {
   }
 
   INFO0("------------------- Run the schedule ---------------------------");
-  SD_simulate(-1);
+  SD_task_t *changed = SD_simulate(-1);
+  free(changed);
   INFO0("------------------- Produce the trace file---------------------------");
   INFO1("Producing the trace of the run into %s",tracefilename);
   FILE*out = fopen(tracefilename,"w");
@@ -112,6 +113,7 @@ int main(int argc, char **argv) {
     default:
       xbt_die(bprintf("Task %s is of unknown kind %d",SD_task_get_name(task),SD_task_get_kind(task)));
     }
+    SD_task_destroy(task);
   }
   fclose(out);
 
index 03c33f9..4d91e4b 100644 (file)
@@ -324,7 +324,7 @@ void SD_task_dump(SD_task_t task)
 void SD_task_dotty(SD_task_t task,void* out) {
   unsigned int counter;
   SD_dependency_t dependency;
-  fprintf(out, "  T%ld [label=\"%.20s\"",(unsigned long int)task, task->name);
+  fprintf(out, "  T%p [label=\"%.20s\"",task, task->name);
   switch(task->kind){
     case SD_TASK_COMM_E2E:
       fprintf(out,", shape=box");
@@ -332,6 +332,8 @@ void SD_task_dotty(SD_task_t task,void* out) {
     case SD_TASK_COMP_SEQ:
       fprintf(out,", shape=circle");
       break;
+    default:
+      xbt_die("Unknown task type!");
   }
   fprintf(out,"];\n");
   xbt_dynar_foreach(task->tasks_before,counter,dependency) {
@@ -772,6 +774,7 @@ static void __SD_task_destroy_scheduling_data(SD_task_t task)
 
   xbt_free(task->computation_amount);
   xbt_free(task->communication_amount);
+  task->computation_amount = task->communication_amount = NULL;
 }
 
 /* Runs a task. This function is directly called by __SD_task_try_to_run if the task
@@ -1163,6 +1166,12 @@ void SD_task_destroy(SD_task_t task)
   if (task->workstation_list != NULL)
     xbt_free(task->workstation_list);
 
+  if (task->communication_amount)
+    xbt_free(task->communication_amount);
+
+  if (task->computation_amount)
+    xbt_free(task->computation_amount);
+
   xbt_dynar_free(&task->tasks_before);
   xbt_dynar_free(&task->tasks_after);
   xbt_free(task);