Pārlūkot izejas kodu

Kernel: sys$waitpid() only needs the waitee thread in the stopped case

If the waitee process is dead, we don't need to inspect the thread.

This fixes an issue with sys$waitpid() failing before reap() since
dead processes will have no remaining threads alive.
Andreas Kling 5 gadi atpakaļ
vecāks
revīzija
8b49804895
1 mainītis faili ar 3 papildinājumiem un 4 dzēšanām
  1. 3 4
      Kernel/Process.cpp

+ 3 - 4
Kernel/Process.cpp

@@ -2318,14 +2318,13 @@ pid_t Process::sys$waitpid(pid_t waitee, int* wstatus, int options)
     if (!waitee_process)
         return -ECHILD;
 
-    auto* waitee_thread = Thread::from_tid(waitee_pid);
-    if (!waitee_thread)
-        return -ECHILD;
-
     ASSERT(waitee_process);
     if (waitee_process->is_dead()) {
         exit_status = reap(*waitee_process);
     } else {
+        auto* waitee_thread = Thread::from_tid(waitee_pid);
+        if (!waitee_thread)
+            return -ECHILD;
         ASSERT(waitee_thread->state() == Thread::State::Stopped);
         exit_status = (waitee_thread->m_stop_signal << 8) | 0x7f;
     }