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 20eafb4cc4
commit 643e87a076
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();
}
}