From b387a0526ad4a2e589465b516814baf90309cb33 Mon Sep 17 00:00:00 2001 From: Bahadir Balban Date: Sun, 9 Nov 2008 10:40:18 +0200 Subject: [PATCH] tcb_destroy() in pager and fs0 now caters for shared structures. --- tasks/fs0/src/task.c | 5 +++++ tasks/mm0/src/task.c | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/tasks/fs0/src/task.c b/tasks/fs0/src/task.c index 75f9f5c..eb062aa 100644 --- a/tasks/fs0/src/task.c +++ b/tasks/fs0/src/task.c @@ -148,6 +148,11 @@ void tcb_destroy(struct tcb *task) { global_remove_task(task); + if (--task->fs_data->tcb_refs == 0) + kfree(task->fs_data); + if (--task->files->tcb_refs == 0) + kfree(task->files); + kfree(task); } diff --git a/tasks/mm0/src/task.c b/tasks/mm0/src/task.c index b0dc262..1c42a93 100644 --- a/tasks/mm0/src/task.c +++ b/tasks/mm0/src/task.c @@ -49,6 +49,7 @@ void global_add_task(struct tcb *task) list_add_tail(&task->list, &global_tasks.list); global_tasks.total++; } + void global_remove_task(struct tcb *task) { BUG_ON(list_empty(&task->list)); @@ -115,6 +116,11 @@ int tcb_destroy(struct tcb *task) { global_remove_task(task); + if (--task->vm_area_head->tcb_refs == 0) + kfree(task->vm_area_head); + if (--task->files->tcb_refs == 0) + kfree(task->files); + kfree(task); return 0;