From 24d58554281e900ddfa3955de693840e4a893a72 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 16 May 2020 12:38:24 +0200 Subject: [PATCH] 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. --- Kernel/Scheduler.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Kernel/Scheduler.cpp b/Kernel/Scheduler.cpp index bd630ee4cf..e600161437 100644 --- a/Kernel/Scheduler.cpp +++ b/Kernel/Scheduler.cpp @@ -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)