+ xbt_assert1(task->sd_data->state == SD_SCHEDULED ||
+ task->sd_data->state == SD_RUNNING ||
+ task->sd_data->state == SD_FAILED,
+ "Task %s: the state must be SD_SCHEDULED, SD_RUNNING or SD_FAILED", task->sd_data->name);
+
+ if (task->sd_data->state == SD_SCHEDULED)
+ __SD_task_destroy_scheduling_data(task);
+
+ task->sd_data->state = SD_NOT_SCHEDULED;
+}
+
+/* Runs a task. This function is called by SD_simulate when a scheduled task can start
+ * (ie when its dependencies are satisfied).
+ */
+void __SD_task_run(SD_task_t task) {
+ SD_CHECK_INIT_DONE();
+ xbt_assert0(task, "Invalid parameter");
+
+ SD_task_data_t sd_data = task->sd_data;
+ surf_workstation_resource->extension_public->
+ execute_parallel_task(sd_data->workstation_nb,
+ sd_data->workstation_list,
+ sd_data->computation_amount,
+ sd_data->communication_amount,
+ sd_data->amount,
+ sd_data->rate);
+ task->sd_data->state = SD_RUNNING;
+
+ __SD_task_destroy_scheduling_data(task); /* now the scheduling data are not useful anymore */