- /* is dst runnable now? */
- if (SD_task_get_state(dst) == SD_RUNNABLE && !sd_global->watch_point_reached) {
- XBT_VERB("Executing task '%s'", SD_task_get_name(dst));
- SD_task_run(dst);
- xbt_dynar_push(sd_global->return_set, &dst);
+ if (SD_task_get_state(succ) == SD_RUNNABLE && !sd_global->watch_point_reached)
+ SD_task_run(succ);
+ }
+ task->successors->clear();
+
+ for (auto output : *task->outputs) {
+ output->start_time = task->finish_time;
+ output->predecessors->erase(task);
+ if (SD_task_get_state(output) == SD_SCHEDULED)
+ SD_task_set_state(output, SD_RUNNABLE);
+ else
+ SD_task_set_state(output, SD_SCHEDULABLE);
+
+ SD_task_t comm_dst = *(output->successors->begin());
+ if (SD_task_get_state(comm_dst) == SD_NOT_SCHEDULED && comm_dst->predecessors->empty()){
+ XBT_DEBUG("%s is a transfer, %s may be ready now if %zu=0",
+ SD_task_get_name(output), SD_task_get_name(comm_dst), comm_dst->predecessors->size());
+ SD_task_set_state(comm_dst, SD_SCHEDULABLE);