1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-24 01:05:08 +00:00

Kernel: Let the wait blocker inspect *all* child threads of a process

Previously would only grab the first thread in the thread list that
had the same PID as our waitee and check if it was stopped.
This commit is contained in:
Andreas Kling 2020-05-16 12:38:24 +02:00
parent 0e7f85c24a
commit 24d5855428

View file

@ -264,9 +264,13 @@ bool Thread::WaitBlocker::should_unblock(Thread& thread, time_t, long)
bool child_exited = child.is_dead();
bool child_stopped = false;
if (child.thread_count()) {
auto& child_thread = child.any_thread();
if (child_thread.state() == Thread::State::Stopped && !child_thread.has_pending_signal(SIGCONT))
child_stopped = true;
child.for_each_thread([&](auto& child_thread) {
if (child_thread.state() == Thread::State::Stopped && !child_thread.has_pending_signal(SIGCONT)) {
child_stopped = true;
return IterationDecision::Break;
}
return IterationDecision::Continue;
});
}
bool wait_finished = ((m_wait_options & WEXITED) && child_exited)