From 16a442f4731ab8e270eae9ee481273c7d7d0a6d8 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 26 May 2026 02:17:34 +0300 Subject: [PATCH] Kernel: Fix Thread::will_exit_because_of_signal I was not checking whether the signal handler has been overwritten to ignore the signal leading to infinite busy loops :) --- kernel/kernel/Thread.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/kernel/kernel/Thread.cpp b/kernel/kernel/Thread.cpp index b54e6aa5..112adffc 100644 --- a/kernel/kernel/Thread.cpp +++ b/kernel/kernel/Thread.cpp @@ -586,9 +586,15 @@ namespace Kernel const uint64_t full_pending_mask = m_signal_pending_mask | process().signal_pending_mask(); const uint64_t signals = full_pending_mask & ~m_signal_block_mask; for (size_t sig = _SIGMIN; sig <= _SIGMAX; sig++) - if (signals & (static_cast(1) << sig)) - if (is_terminating_signal(sig) || is_abnormal_terminating_signal(sig)) - return true; + { + if (!(signals & (static_cast(1) << sig))) + continue; + if (!is_terminating_signal(sig) && !is_abnormal_terminating_signal(sig)) + continue; + SpinLockGuard _(m_process->m_signal_lock); + if (m_process->m_signal_handlers[sig].sa_handler == SIG_DFL) + return true; + } return false; }