Kernel: Optimize process stopping
This commit is contained in:
@@ -2983,6 +2983,9 @@ namespace Kernel
|
||||
|
||||
void Process::wait_while_stopped()
|
||||
{
|
||||
if (!m_stopped) [[likely]]
|
||||
return;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
while (Thread::current().will_exit_because_of_signal())
|
||||
|
||||
@@ -609,16 +609,15 @@ namespace Kernel
|
||||
SpinLockGuard _2(m_process->m_signal_lock);
|
||||
|
||||
const uint64_t process_signal_pending_mask = m_process->m_signal_pending_mask;
|
||||
const uint64_t full_pending_mask = m_signal_pending_mask | process_signal_pending_mask;
|
||||
for (signal = _SIGMIN; signal <= _SIGMAX; signal++)
|
||||
{
|
||||
const uint64_t mask = 1ull << signal;
|
||||
if ((full_pending_mask & mask) && !(m_signal_block_mask & mask))
|
||||
break;
|
||||
}
|
||||
if (signal > _SIGMAX)
|
||||
const uint64_t full_pending_mask = (m_signal_pending_mask | process_signal_pending_mask) & ~m_signal_block_mask;
|
||||
if (full_pending_mask == 0) [[likely]]
|
||||
return false;
|
||||
|
||||
for (signal = _SIGMIN; signal <= _SIGMAX; signal++)
|
||||
if (full_pending_mask & (1ull << signal))
|
||||
break;
|
||||
ASSERT(signal <= _SIGMAX);
|
||||
|
||||
if (process_signal_pending_mask & (1ull << signal))
|
||||
signal_info = m_process->m_signal_infos[signal];
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user