From 54a1998d42eca579e40351359f84f24f12772afb Mon Sep 17 00:00:00 2001 From: apio Date: Mon, 19 Jun 2023 12:35:31 +0200 Subject: [PATCH] kernel: Also move children's parent to PID 1 in the common thread exit function --- kernel/src/sys/exit.cpp | 5 ----- kernel/src/thread/Thread.cpp | 6 ++++++ 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/kernel/src/sys/exit.cpp b/kernel/src/sys/exit.cpp index 558565ff..b6a33dcc 100644 --- a/kernel/src/sys/exit.cpp +++ b/kernel/src/sys/exit.cpp @@ -7,10 +7,5 @@ Result sys_exit(Registers*, SyscallArgs args) Thread* current = Scheduler::current(); - Scheduler::for_each_child(current, [](Thread* child) { - child->parent = Scheduler::init_thread(); - return true; - }); - current->exit_and_signal_parent(status); } diff --git a/kernel/src/thread/Thread.cpp b/kernel/src/thread/Thread.cpp index 24621cc8..a46aec22 100644 --- a/kernel/src/thread/Thread.cpp +++ b/kernel/src/thread/Thread.cpp @@ -74,6 +74,11 @@ Result> Thread::resolve_atfile(int dirfd, const String& pa if (is_kernel) state = ThreadState::Dying; else { + Scheduler::for_each_child(this, [](Thread* child) { + child->parent = Scheduler::init_thread(); + return true; + }); + if (parent && parent->state == ThreadState::Waiting) { auto child = *parent->child_being_waited_for; @@ -83,6 +88,7 @@ Result> Thread::resolve_atfile(int dirfd, const String& pa parent->wake_up(); } } + state = ThreadState::Exited; } status = _status;