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 :)
This commit is contained in:
2026-05-26 02:17:34 +03:00
parent becfa228fe
commit 16a442f473

View File

@@ -586,9 +586,15 @@ namespace Kernel
const uint64_t full_pending_mask = m_signal_pending_mask | process().signal_pending_mask(); 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; const uint64_t signals = full_pending_mask & ~m_signal_block_mask;
for (size_t sig = _SIGMIN; sig <= _SIGMAX; sig++) for (size_t sig = _SIGMIN; sig <= _SIGMAX; sig++)
if (signals & (static_cast<uint64_t>(1) << sig)) {
if (is_terminating_signal(sig) || is_abnormal_terminating_signal(sig)) if (!(signals & (static_cast<uint64_t>(1) << sig)))
return true; 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; return false;
} }