From a3aca67eef7fbd4e0f0f860d7fa7867b7d6e8984 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Sun, 4 Jun 2023 17:39:23 +0300 Subject: [PATCH] Kernel: fork() now clones current thread This is how posix specifies thread cloning during fork --- kernel/kernel/Process.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/kernel/kernel/Process.cpp b/kernel/kernel/Process.cpp index c7655ab1..23325dd6 100644 --- a/kernel/kernel/Process.cpp +++ b/kernel/kernel/Process.cpp @@ -168,9 +168,6 @@ namespace Kernel for (auto* mapped_range : m_mapped_ranges) MUST(forked->m_mapped_ranges.push_back(mapped_range->clone(forked->page_table()))); - ASSERT(m_threads.size() == 1); - ASSERT(m_threads.front() == &Thread::current()); - for (auto& allocator : m_fixed_width_allocators) if (allocator->allocations() > 0) MUST(forked->m_fixed_width_allocators.push_back(MUST(allocator->clone(forked->page_table())))); @@ -178,7 +175,8 @@ namespace Kernel if (m_general_allocator) forked->m_general_allocator = MUST(m_general_allocator->clone(forked->page_table())); - Thread* thread = MUST(m_threads.front()->clone(forked, rsp, rip)); + ASSERT(this == &Process::current()); + Thread* thread = MUST(Thread::current().clone(forked, rsp, rip)); forked->add_thread(thread); register_process(forked);