Kernel: Threads are deleted sooner and cleaner

We now delete threads when
    1. it is marked as Terminated and is the current thread
    2. it tries to start execution in Terminated state

This allows us to never have thread executing in Terminated state
This commit is contained in:
Bananymous
2023-08-03 10:42:14 +03:00
parent a11b5ae41f
commit e57c1fc9fc
3 changed files with 29 additions and 19 deletions

View File

@@ -201,13 +201,11 @@ namespace IDT
Kernel::panic("Unhandled exception");
}
// Don't continue exection when terminated
if (Kernel::Thread::current().state() == Kernel::Thread::State::Terminated)
Kernel::Scheduler::get().execute_current_thread();
ASSERT(Kernel::Thread::current().state() != Kernel::Thread::State::Terminated);
if (from_userspace)
{
ASSERT(Kernel::Thread::current().state() != Kernel::Thread::State::Terminating);
ASSERT(Kernel::Thread::current().state() == Kernel::Thread::State::Executing);
Kernel::Thread::current().load_sse();
}
}
@@ -243,13 +241,11 @@ namespace IDT
Kernel::Scheduler::get().reschedule_if_idling();
// Don't continue exection when terminated
if (Kernel::Thread::current().state() == Kernel::Thread::State::Terminated)
Kernel::Scheduler::get().execute_current_thread();
ASSERT(Kernel::Thread::current().state() != Kernel::Thread::State::Terminated);
if (from_userspace)
{
ASSERT(Kernel::Thread::current().state() != Kernel::Thread::State::Terminating);
ASSERT(Kernel::Thread::current().state() == Kernel::Thread::State::Executing);
Kernel::Thread::current().load_sse();
}
}