Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add dsend_bounded send_with_timeout_bounded
[simgrid.git] / src / simdag / sd_task.c
index 1520ead..058e3bf 100644 (file)
@@ -494,16 +494,16 @@ void SD_task_dump(SD_task_t task)
 
   XBT_INFO("Displaying task %s", SD_task_get_name(task));
   statename = bprintf("%s %s %s %s %s %s %s %s",
-                      (task->state & SD_NOT_SCHEDULED ? "not scheduled" :
+                      (task->state == SD_NOT_SCHEDULED ? "not scheduled" :
                        ""),
-                      (task->state & SD_SCHEDULABLE ? "schedulable" : ""),
-                      (task->state & SD_SCHEDULED ? "scheduled" : ""),
-                      (task->state & SD_RUNNABLE ? "runnable" :
+                      (task->state == SD_SCHEDULABLE ? "schedulable" : ""),
+                      (task->state == SD_SCHEDULED ? "scheduled" : ""),
+                      (task->state == SD_RUNNABLE ? "runnable" :
                        "not runnable"),
-                      (task->state & SD_IN_FIFO ? "in fifo" : ""),
-                      (task->state & SD_RUNNING ? "running" : ""),
-                      (task->state & SD_DONE ? "done" : ""),
-                      (task->state & SD_FAILED ? "failed" : ""));
+                      (task->state == SD_IN_FIFO ? "in fifo" : ""),
+                      (task->state == SD_RUNNING ? "running" : ""),
+                      (task->state == SD_DONE ? "done" : ""),
+                      (task->state == SD_FAILED ? "failed" : ""));
   XBT_INFO("  - state: %s", statename);
   free(statename);
 
@@ -1386,9 +1386,10 @@ void SD_task_distribute_comp_amdhal(SD_task_t task, int ws_count)
               "Task %s is not a SD_TASK_COMP_PAR_AMDAHL typed task."
               "Cannot use this function.",
               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);
   task->workstation_nb = ws_count;
   task->workstation_list = xbt_new0(SD_workstation_t, ws_count);
   
@@ -1538,6 +1539,10 @@ 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);
 
           before->computation_amount = xbt_new0(double,
                                                 before->workstation_nb);
@@ -1603,6 +1608,11 @@ 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);
+
           after->computation_amount = xbt_new0(double, after->workstation_nb);
           after->communication_amount = xbt_new0(double,
                                                  after->workstation_nb*