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 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user