+ xbt_assert1(src != dst, "Cannot remove a dependency between task '%s' and itself", SD_task_get_name(src));
+
+ xbt_dynar_t dynar = src->tasks_after;
+ int length = xbt_dynar_length(dynar);
+ int found = 0;
+ int i;
+ SD_dependency_t dependency;
+ for (i = 0; i < length && !found; i++) {
+ xbt_dynar_get_cpy(dynar, i, &dependency);
+ if (dependency->dst == dst) {
+ xbt_dynar_remove_at(dynar, i, NULL);
+ found = 1;
+ }
+ }
+ xbt_assert4(found, "No dependency found between task '%s' and '%s': task '%s' is not a successor of task '%s'",
+ SD_task_get_name(src), SD_task_get_name(dst), SD_task_get_name(dst), SD_task_get_name(src));
+
+ dynar = dst->tasks_before;
+ length = xbt_dynar_length(dynar);
+ found = 0;
+
+ for (i = 0; i < length && !found; i++) {
+ xbt_dynar_get_cpy(dynar, i, &dependency);
+ if (dependency->src == src) {
+ xbt_dynar_remove_at(dynar, i, NULL);
+ __SD_task_destroy_dependency(dependency);
+ found = 1;
+ }
+ }
+ xbt_assert4(found, "SimDag error: task '%s' is a successor of '%s' but task '%s' is not a predecessor of task '%s'",
+ SD_task_get_name(dst), SD_task_get_name(src), SD_task_get_name(src), SD_task_get_name(dst)); /* should never happen... */
+
+ /* __SD_print_dependencies(src);
+ __SD_print_dependencies(dst); */