From 79a2b84c81f864b658879a23f48184ffa9293553 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 20 May 2025 20:30:41 +0300 Subject: [PATCH] Kernel: Fix process exit when there are multiple threads --- kernel/kernel/Process.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/kernel/kernel/Process.cpp b/kernel/kernel/Process.cpp index c6f4737e56..b823c5436e 100644 --- a/kernel/kernel/Process.cpp +++ b/kernel/kernel/Process.cpp @@ -301,8 +301,14 @@ namespace Kernel ); } - while (!m_threads.empty()) - m_threads.front()->on_exit(); + for (size_t i = 0; i < m_threads.size(); i++) + { + if (m_threads[i] == &Thread::current()) + continue; + m_threads[i]->add_signal(SIGKILL); + } + + Thread::current().on_exit(); ASSERT_NOT_REACHED(); } @@ -2310,14 +2316,10 @@ namespace Kernel return BAN::Error::from_errno(EINVAL); TRY(m_exited_pthreads.emplace_back(Thread::current().tid(), value)); - for (auto* thread : m_threads) - { - if (thread != &Thread::current()) - continue; - m_pthread_exit_blocker.unblock(); - m_process_lock.unlock(); - thread->on_exit(); - } + + m_pthread_exit_blocker.unblock(); + m_process_lock.unlock(); + Thread::current().on_exit(); ASSERT_NOT_REACHED(); }