From fc1a6cacdcf508305e0df98e0bb56465fc7928d4 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Fri, 26 Jun 2026 01:48:36 +0300 Subject: [PATCH] Kernel: Optimize process stopping --- kernel/kernel/Process.cpp | 3 +++ kernel/kernel/Thread.cpp | 15 +++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/kernel/kernel/Process.cpp b/kernel/kernel/Process.cpp index 33e910cf..43d19763 100644 --- a/kernel/kernel/Process.cpp +++ b/kernel/kernel/Process.cpp @@ -2983,6 +2983,9 @@ namespace Kernel void Process::wait_while_stopped() { + if (!m_stopped) [[likely]] + return; + for (;;) { while (Thread::current().will_exit_because_of_signal()) diff --git a/kernel/kernel/Thread.cpp b/kernel/kernel/Thread.cpp index 112adffc..cbf6a70e 100644 --- a/kernel/kernel/Thread.cpp +++ b/kernel/kernel/Thread.cpp @@ -609,16 +609,15 @@ namespace Kernel SpinLockGuard _2(m_process->m_signal_lock); const uint64_t process_signal_pending_mask = m_process->m_signal_pending_mask; - const uint64_t full_pending_mask = m_signal_pending_mask | process_signal_pending_mask; - for (signal = _SIGMIN; signal <= _SIGMAX; signal++) - { - const uint64_t mask = 1ull << signal; - if ((full_pending_mask & mask) && !(m_signal_block_mask & mask)) - break; - } - if (signal > _SIGMAX) + const uint64_t full_pending_mask = (m_signal_pending_mask | process_signal_pending_mask) & ~m_signal_block_mask; + if (full_pending_mask == 0) [[likely]] return false; + for (signal = _SIGMIN; signal <= _SIGMAX; signal++) + if (full_pending_mask & (1ull << signal)) + break; + ASSERT(signal <= _SIGMAX); + if (process_signal_pending_mask & (1ull << signal)) signal_info = m_process->m_signal_infos[signal]; else