task->kind = SD_TASK_NOT_TYPED;
task->state= SD_NOT_SCHEDULED;
xbt_dynar_push(sd_global->initial_task_set,&task);
- task->return_hookup.prev = NULL;
- task->return_hookup.next = NULL;
task->marked = 0;
*/
void SD_task_destroy(SD_task_t task)
{
+ int idx;
XBT_DEBUG("Destroying task %s...", SD_task_get_name(task));
__SD_task_remove_dependencies(task);
if (__SD_task_is_scheduled_or_runnable(task))
__SD_task_destroy_scheduling_data(task);
- xbt_swag_remove(task, sd_global->return_set);
+ idx = xbt_dynar_search_or_negative(sd_global->return_set, &task);
+ if (idx >=0) {
+ xbt_dynar_remove_at(sd_global->return_set, idx, NULL);
+ }
xbt_free(task->name);
if (task->surf_action != NULL)
- task->surf_action->unref();
+ task->surf_action->unref();
xbt_free(task->workstation_list);
xbt_free(task->bytes_amount);
case SD_SCHEDULABLE:
if (SD_task_get_state(task) == SD_FAILED){
xbt_dynar_remove_at(sd_global->completed_task_set,
- xbt_dynar_search(sd_global->completed_task_set, &task), &task);
+ xbt_dynar_search(sd_global->completed_task_set, &task), NULL);
xbt_dynar_push(sd_global->initial_task_set,&task);
}
break;
case SD_SCHEDULED:
if (SD_task_get_state(task) == SD_RUNNABLE){
xbt_dynar_remove_at(sd_global->executable_task_set,
- xbt_dynar_search(sd_global->executable_task_set, &task), &task);
+ xbt_dynar_search(sd_global->executable_task_set, &task), NULL);
xbt_dynar_push(sd_global->initial_task_set,&task);
}
break;
case SD_IN_FIFO:
xbt_dynar_remove_at(sd_global->executable_task_set,
- xbt_dynar_search(sd_global->executable_task_set, &task), &task);
+ xbt_dynar_search(sd_global->executable_task_set, &task), NULL);
xbt_dynar_push(sd_global->initial_task_set,&task);
break;
case SD_RUNNABLE:
idx = xbt_dynar_search_or_negative(sd_global->initial_task_set, &task);
if (idx >= 0) {
- xbt_dynar_remove_at(sd_global->initial_task_set, idx, &task);
+ xbt_dynar_remove_at(sd_global->initial_task_set, idx, NULL);
xbt_dynar_push(sd_global->executable_task_set,&task);
}
break;
case SD_RUNNING:
if (SD_task_get_state(task) == SD_RUNNABLE){
xbt_dynar_remove_at(sd_global->executable_task_set,
- xbt_dynar_search(sd_global->executable_task_set, &task), &task);
+ xbt_dynar_search(sd_global->executable_task_set, &task), NULL);
} else {
if (SD_task_get_state(task) == SD_IN_FIFO){
xbt_dynar_remove_at(sd_global->initial_task_set,
- xbt_dynar_search(sd_global->initial_task_set, &task), &task);
+ xbt_dynar_search(sd_global->initial_task_set, &task), NULL);
}
}
break;
return task->remains;
}
-int SD_task_get_kind(SD_task_t task)
+e_SD_task_kind_t SD_task_get_kind(SD_task_t task)
{
return task->kind;
}