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:
@@ -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<uint64_t>(1) << sig))
|
||||
if (is_terminating_signal(sig) || is_abnormal_terminating_signal(sig))
|
||||
return true;
|
||||
{
|
||||
if (!(signals & (static_cast<uint64_t>(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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user