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