- count = 0;
- xbt_dynar_foreach(task->tasks_before,count,depbefore){
- parent_task = depbefore->src;
- if(parent_task->kind == SD_TASK_COMM_E2E){
- unsigned int j=0;
- parent_task->marked = 1;
- SD_task_t parent_task_2 = NULL;
- xbt_dynar_foreach(parent_task->tasks_before,j,depbefore){
- parent_task_2 = depbefore->src;
- if(children_are_marked(parent_task_2))
- xbt_dynar_push(next, &parent_task_2);
- }
- } else{
- if(children_are_marked(parent_task))
- xbt_dynar_push(next, &parent_task);
- }
- parent_task = NULL;
+ for (SD_task_t it : *task->inputs){
+ it->marked = 1;
+ // Inputs are communication, hence they can have only one predecessor
+ SD_task_t input_pred = *(it->predecessors->begin());
+ if (children_are_marked(input_pred))
+ xbt_dynar_push(next, &input_pred);
+ }
+ for (SD_task_t it : *task->predecessors) {
+ if (children_are_marked(it))
+ xbt_dynar_push(next, &it);