@see SD_task_management */
typedef enum {
- /* leave 0 for "not typed" */
+ SD_TASK_NOT_TYPED = 0, /**< @no specified type */
SD_TASK_COMM_E2E = 1, /**< @brief end to end communication */
SD_TASK_COMP_SEQ = 2, /**< @brief sequential computation */
} e_SD_task_kind_t;
/* general information */
task->data = data; /* user data */
task->name = xbt_strdup(name);
- task->kind = 0;
+ task->kind = SD_TASK_NOT_TYPED;
task->state_hookup.prev = NULL;
task->state_hookup.next = NULL;
task->state_set = sd_global->not_scheduled_task_set;
"Task %s: the state must be SD_SCHEDULED, SD_READY, SD_RUNNING or SD_FAILED",
SD_task_get_name(task));
- if (__SD_task_is_scheduled_or_ready(task)) /* if the task is scheduled or ready */
+ if (__SD_task_is_scheduled_or_ready(task) /* if the task is scheduled or ready */
+ && task->kind == SD_TASK_NOT_TYPED) /* Don't free scheduling data for typed tasks */
__SD_task_destroy_scheduling_data(task);
if (__SD_task_is_running(task)) /* the task should become SD_FAILED */