Kaynağa Gözat

Kernel: Unblock tracer process in Process:unblock_waiters()

Since the tracer process may not be our parent process, we need to
explicitly unblock it (instead of the parent) if we are being traced.
Itamar 3 yıl önce
ebeveyn
işleme
9aa6dd6b78
1 değiştirilmiş dosya ile 8 ekleme ve 2 silme
  1. 8 2
      Kernel/Process.cpp

+ 8 - 2
Kernel/Process.cpp

@@ -661,8 +661,14 @@ void Process::disowned_by_waiter(Process& process)
 
 
 void Process::unblock_waiters(Thread::WaitBlocker::UnblockFlags flags, u8 signal)
 void Process::unblock_waiters(Thread::WaitBlocker::UnblockFlags flags, u8 signal)
 {
 {
-    if (auto parent = Process::from_pid(ppid()))
-        parent->m_wait_blocker_set.unblock(*this, flags, signal);
+    RefPtr<Process> waiter_process;
+    if (auto* my_tracer = tracer())
+        waiter_process = Process::from_pid(my_tracer->tracer_pid());
+    else
+        waiter_process = Process::from_pid(ppid());
+
+    if (waiter_process)
+        waiter_process->m_wait_blocker_set.unblock(*this, flags, signal);
 }
 }
 
 
 void Process::die()
 void Process::die()