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; }