xbt_dynar_reset(sd_global->return_set);
/* explore the runnable tasks */
- for (std::set<SD_task_t>::iterator it=sd_global->executable_tasks->begin();
- it!=sd_global->executable_tasks->end(); ++it){
+ std::set<SD_task_t>::iterator it=sd_global->executable_tasks->begin();
+ while(it != sd_global->executable_tasks->end()){
task = *it;
+ it++;
XBT_VERB("Executing task '%s'", SD_task_get_name(task));
SD_task_run(task);
xbt_dynar_push(sd_global->return_set, &task);
break;
case SD_SCHEDULED:
if (SD_task_get_state(task) == SD_RUNNABLE){
- sd_global->executable_tasks->erase(task);
sd_global->initial_tasks->insert(task);
+ sd_global->executable_tasks->erase(task);
}
break;
case SD_RUNNABLE:
idx = std::find(sd_global->initial_tasks->begin(), sd_global->initial_tasks->end(), task);
if (idx != sd_global->initial_tasks->end()) {
- sd_global->initial_tasks->erase(idx);
sd_global->executable_tasks->insert(*idx);
+ sd_global->initial_tasks->erase(idx);
}
break;
case SD_RUNNING: