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
commit 24d5855428
Notes: sideshowbarker 2024-07-19 06:36:40 +09:00

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)