Преглед изворни кода

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 година
родитељ
комит
8b49804895
1 измењених фајлова са 3 додато и 4 уклоњено
  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;
     }