From 9692ed2f93777e1060837b97687509f8a22c2b60 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Tue, 3 May 2022 20:31:50 +0200 Subject: kernel: reference count mount objects, free them on process kills --- src/kernel/proc.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/kernel/proc.c') diff --git a/src/kernel/proc.c b/src/kernel/proc.c index ba19943..90570b8 100644 --- a/src/kernel/proc.c +++ b/src/kernel/proc.c @@ -72,6 +72,9 @@ struct process *process_fork(struct process *parent, int flags) { // no overflow check - if you manage to get 2^32 references to a handle you have bigger problems } + assert(child->mount); + child->mount->refs++; + child->id = next_pid++; return child; @@ -104,6 +107,10 @@ void process_free(struct process *p) { while (p->child) process_free(p->child); + // also could be done on kill + vfs_mount_remref(p->mount); + p->mount = NULL; + if (!p->parent) return; process_forget(p); pagedir_free(p->pages); // TODO could be done on kill -- cgit v1.2.3