-static void __SD_task_remove_dependencies(SD_task_t task);
-static void __SD_task_destroy_scheduling_data(SD_task_t task);
+/* Destroys a dependency between two tasks. */
+static void __SD_task_dependency_destroy(void *dependency)
+{
+ xbt_free(((SD_dependency_t)dependency)->name);
+ xbt_free(dependency);
+}
+
+/* Remove all dependencies associated with a task. This function is called when the task is destroyed. */
+static void __SD_task_remove_dependencies(SD_task_t task)
+{
+ /* we must destroy the dependencies carefully (with SD_dependency_remove) because each one is stored twice */
+ SD_dependency_t dependency;
+ while (xbt_dynar_is_empty(task->tasks_before) == 0) {
+ xbt_dynar_get_cpy(task->tasks_before, 0, &dependency);
+ SD_task_dependency_remove(dependency->src, dependency->dst);
+ }
+
+ while (xbt_dynar_is_empty(task->tasks_after) == 0) {
+ xbt_dynar_get_cpy(task->tasks_after, 0, &dependency);
+ SD_task_dependency_remove(dependency->src, dependency->dst);
+ }
+}