Kernel: Threads can now be terminated mid execution

This commit is contained in:
2023-04-10 21:07:25 +03:00
parent df6e8a6562
commit f924ac9265
6 changed files with 48 additions and 19 deletions
+12 -9
View File
@@ -16,8 +16,8 @@
namespace Kernel
{
extern "C" void start_thread(uintptr_t rsp, uintptr_t rip);
extern "C" void continue_thread(uintptr_t rsp, uintptr_t rip);
extern "C" [[noreturn]] void start_thread(uintptr_t rsp, uintptr_t rip);
extern "C" [[noreturn]] void continue_thread(uintptr_t rsp, uintptr_t rip);
extern "C" uintptr_t read_rip();
static Scheduler* s_instance = nullptr;
@@ -166,14 +166,17 @@ namespace Kernel
Thread& current = current_thread();
if (current.started())
switch (current.state())
{
continue_thread(current.rsp(), current.rip());
}
else
{
current.set_started();
start_thread(current.rsp(), current.rip());
case Thread::State::NotStarted:
current.set_started();
start_thread(current.rsp(), current.rip());
case Thread::State::Executing:
continue_thread(current.rsp(), current.rip());
case Thread::State::Terminating:
ENABLE_INTERRUPTS();
current.on_exit();
ASSERT_NOT_REACHED();
}
ASSERT_NOT_REACHED();