Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Compile fix: smx_process_t->request is a s_smx_req_t now.
[simgrid.git] / src / simdag / sd_task.c
index 47c41c3..105ac01 100644 (file)
@@ -8,7 +8,7 @@
 #include "simdag/simdag.h"
 #include "xbt/sysdep.h"
 #include "xbt/dynar.h"
-#include "instr/private.h"
+#include "instr/instr_private.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(sd_task, sd,
                                 "Logging specific to SimDag (task)");
@@ -41,6 +41,7 @@ SD_task_t SD_task_create(const char *name, void *data, double amount)
   task->state_hookup.next = NULL;
   task->state_set = sd_global->not_scheduled_task_set;
   task->state = SD_NOT_SCHEDULED;
+  task->marked = 0;
   xbt_swag_insert(task, task->state_set);
 
   task->amount = amount;
@@ -61,7 +62,7 @@ SD_task_t SD_task_create(const char *name, void *data, double amount)
   task->workstation_list = NULL;
   task->computation_amount = NULL;
   task->communication_amount = NULL;
-  task->rate = 0;
+  task->rate = -1;
 
   sd_global->task_number++;
 
@@ -756,30 +757,36 @@ void SD_task_schedule(SD_task_t task, int workstation_count,
 {
   int communication_nb;
   task->workstation_nb = 0;
-  task->rate = 0;
+  task->rate = -1;
   xbt_assert0(workstation_count > 0, "workstation_nb must be positive");
 
   task->workstation_nb = workstation_count;
   task->rate = rate;
 
   if (computation_amount) {
-    task->computation_amount = xbt_new(double, workstation_count);
+    task->computation_amount = xbt_realloc(task->computation_amount,
+                                           sizeof(double) * workstation_count);
     memcpy(task->computation_amount, computation_amount,
            sizeof(double) * workstation_count);
   } else {
+    xbt_free(task->computation_amount);
     task->computation_amount = NULL;
   }
 
   communication_nb = workstation_count * workstation_count;
   if (communication_amount) {
-    task->communication_amount = xbt_new(double, communication_nb);
+    task->communication_amount = xbt_realloc(task->communication_amount,
+                                             sizeof(double) * communication_nb);
     memcpy(task->communication_amount, communication_amount,
            sizeof(double) * communication_nb);
   } else {
+    xbt_free(task->communication_amount);
     task->communication_amount = NULL;
   }
 
-  task->workstation_list = xbt_new(SD_workstation_t, workstation_count);
+  task->workstation_list =
+    xbt_realloc(task->workstation_list,
+                sizeof(SD_workstation_t) * workstation_count);
   memcpy(task->workstation_list, workstation_list,
          sizeof(SD_workstation_t) * workstation_count);