Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
added jedule output to SimDAG
[simgrid.git] / src / simdag / sd_task.c
index 47c41c3..6ef31d4 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++;
 
@@ -149,6 +150,9 @@ void __SD_task_set_state(SD_task_t task, e_SD_task_state_t new_state)
     task->finish_time =
         surf_workstation_model->action_get_finish_time(task->surf_action);
     task->remains = 0;
+#ifdef HAVE_JEDULE
+    jedule_log_sd_event(task);
+#endif
     break;
   case SD_FAILED:
     task->state_set = sd_global->failed_task_set;
@@ -756,30 +760,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);