From 8ee57c885a72854d1884a886de4db538a8468e07 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Fri, 6 May 2022 14:41:58 +0200 Subject: syscalls: merge fork() and fs_fork2() --- src/kernel/proc.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src/kernel/proc.c') diff --git a/src/kernel/proc.c b/src/kernel/proc.c index ed257fd..7ef4579 100644 --- a/src/kernel/proc.c +++ b/src/kernel/proc.c @@ -44,7 +44,7 @@ struct process *process_seed(struct kmain_info *info) { struct process *process_fork(struct process *parent, int flags) { struct process *child = kmalloc(sizeof *child); - memcpy(child, parent, sizeof *child); + memcpy(child, parent, sizeof *child); // TODO manually set fields child->pages = pagedir_copy(parent->pages); child->sibling = parent->child; @@ -55,9 +55,13 @@ struct process *process_fork(struct process *parent, int flags) { parent->handled_req = NULL; // TODO control this with a flag - if (child->controlled) { - child->controlled->potential_handlers++; - child->controlled->refcount++; + if ((flags & FORK_NEWFS) == 0) { + if (child->controlled) { + child->controlled->potential_handlers++; + child->controlled->refcount++; + } + } else { + child->controlled = NULL; } for (handle_t h = 0; h < HANDLE_MAX; h++) { -- cgit v1.2.3