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.
This commit is contained in:
Itamar 2021-09-15 15:55:48 +03:00 committed by Andreas Kling
commit 9aa6dd6b78
Notes: sideshowbarker 2024-07-18 03:48:04 +09:00

View file

@ -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()