task->tasks_before = xbt_dynar_new(sizeof(SD_dependency_t), NULL);
task->tasks_after = xbt_dynar_new(sizeof(SD_dependency_t), NULL);
task->unsatisfied_dependencies=0;
+ task->is_not_ready=0;
+
/* scheduling parameters */
task->workstation_nb = 0;
task->workstation_list = NULL;
xbt_dynar_push(dst->tasks_before, &dependency);
dst->unsatisfied_dependencies++;
+ dst->is_not_ready++;
/* if the task was runnable, then dst->tasks_before is not empty anymore,
so we must go back to state SD_SCHEDULED */
xbt_dynar_remove_at(dynar, i, NULL);
__SD_task_dependency_destroy(dependency);
dst->unsatisfied_dependencies--;
+ dst->is_not_ready--;
found = 1;
}
}
else
__SD_task_set_state(dst, SD_SCHEDULABLE);
}
+
+ if (dst->is_not_ready == 0)
+ __SD_task_set_state(dst, SD_SCHEDULABLE);
+
/* __SD_print_dependencies(src);
__SD_print_dependencies(dst); */
}
task->start_time = -1.0;
}
-/* Destroys the data memorised by SD_task_schedule. Task state must be SD_SCHEDULED or SD_RUNNABLE.
+/* Destroys the data memorized by SD_task_schedule. Task state must be SD_SCHEDULED or SD_RUNNABLE.
*/
static void __SD_task_destroy_scheduling_data(SD_task_t task)
{
SD_task_t before = dep->src;
if (before->kind == SD_TASK_COMM_E2E) {
before->workstation_list[1] = task->workstation_list[0];
- if (before->workstation_list[0] && __SD_task_is_schedulable(before)) {
+
+ if (before->workstation_list[0] &&
+ (__SD_task_is_schedulable(before) || __SD_task_is_not_scheduled(before))) {
SD_task_do_schedule(before);
VERB4("Auto-Schedule comm task %s between %s -> %s. It costs %.f bytes",
SD_task_get_name(before),
SD_task_t after = dep->dst;
if (after->kind == SD_TASK_COMM_E2E) {
after->workstation_list[0] = task->workstation_list[0];
+ //J-N : Why did you comment on these line (this comment add a bug I think)?
if (after->workstation_list[1] && (__SD_task_is_not_scheduled(after) ||
- __SD_task_is_schedulable(after))) {
+ __SD_task_is_schedulable(after))) {
SD_task_do_schedule(after);
VERB4("Auto-Schedule comm task %s between %s -> %s. It costs %.f bytes",
SD_task_get_name(after),