Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Do not forget to insert task in the correct swag after having updated
[simgrid.git] / src / simdag / sd_task.c
index e159888..d9b5ed6 100644 (file)
@@ -21,6 +21,8 @@ SD_task_t SD_task_create(const char *name, void *data, double amount) {
     task->name = NULL;
 
   task->state_set = sd_global->not_scheduled_task_set;
+  xbt_swag_insert(task,task->state_set);
+
   task->amount = amount;
   task->surf_action = NULL;
   task->watch_points = 0;
@@ -66,7 +68,7 @@ e_SD_task_state_t SD_task_get_state(SD_task_t task) {
   return SD_FAILED;
 }
 
-/* Changes the state of a task and update the swags.
+/* Changes the state of a task. Update the swags and the flag sd_global->watch_point_reached.
  */
 static void __SD_task_set_state(SD_task_t task, e_SD_task_state_t new_state) {
   xbt_swag_remove(task, task->state_set);
@@ -86,6 +88,12 @@ static void __SD_task_set_state(SD_task_t task, e_SD_task_state_t new_state) {
   default: /* SD_FAILED */
     task->state_set = sd_global->failed_task_set;
   }
+  xbt_swag_insert(task,task->state_set);
+
+  if (task->watch_points & new_state) {
+    printf("Watch point reached with task '%s' in state %d!\n", SD_task_get_name(task), new_state);
+    sd_global->watch_point_reached = 1;
+  }
 }
 
 /* Sets the data of a task.
@@ -325,7 +333,7 @@ void SD_task_schedule(SD_task_t task, int workstation_nb,
   task->workstation_list = xbt_new0(void*, workstation_nb);
   int i;
   for (i = 0; i < workstation_nb; i++) {
-    task->workstation_list[i] = workstation_list[i]->sd_data->surf_workstation;
+    task->workstation_list[i] = workstation_list[i]->surf_workstation;
   }
 
   __SD_task_set_state(task, SD_SCHEDULED);