Преглед на файлове

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 години
родител
ревизия
9aa6dd6b78
променени са 1 файла, в които са добавени 8 реда и са изтрити 2 реда
  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)
 {
-    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()