mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-01-08 12:19:37 +03:00
Kernel: waitpid() should unblock and -ECHILD if SIG_IGN reaps child
This commit is contained in:
parent
c983e96664
commit
23eafdb8d6
Notes:
sideshowbarker
2024-07-19 12:11:20 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/23eafdb8d6f
@ -1554,6 +1554,9 @@ pid_t Process::sys$waitpid(pid_t waitee, int* wstatus, int options)
|
||||
|
||||
// NOTE: If waitee was -1, m_waitee_pid will have been filled in by the scheduler.
|
||||
Process* waitee_process = Process::from_pid(waitee_pid);
|
||||
if (!waitee_process)
|
||||
return -ECHILD;
|
||||
|
||||
ASSERT(waitee_process);
|
||||
if (waitee_process->is_dead()) {
|
||||
exit_status = reap(*waitee_process);
|
||||
|
@ -195,6 +195,11 @@ Thread::WaitBlocker::WaitBlocker(int wait_options, pid_t& waitee_pid)
|
||||
bool Thread::WaitBlocker::should_unblock(Thread& thread, time_t, long)
|
||||
{
|
||||
bool should_unblock = false;
|
||||
if (m_waitee_pid != -1) {
|
||||
auto* peer = Process::from_pid(m_waitee_pid);
|
||||
if (!peer)
|
||||
return true;
|
||||
}
|
||||
thread.process().for_each_child([&](Process& child) {
|
||||
if (m_waitee_pid != -1 && m_waitee_pid != child.pid())
|
||||
return IterationDecision::Continue;
|
||||
|
Loading…
Reference in New Issue
Block a user