Kernel: Threads can now be terminated mid execution
This commit is contained in:
@@ -23,9 +23,11 @@ namespace Kernel
|
||||
|
||||
public:
|
||||
static BAN::ErrorOr<BAN::RefPtr<Process>> create_kernel(entry_t, void*);
|
||||
~Process() {}
|
||||
~Process();
|
||||
|
||||
BAN::ErrorOr<void> add_thread(entry_t, void*);
|
||||
void exit();
|
||||
|
||||
BAN::ErrorOr<Thread*> add_thread(entry_t, void*);
|
||||
void on_thread_exit(Thread&);
|
||||
|
||||
BAN::ErrorOr<void> init_stdio();
|
||||
|
||||
@@ -18,6 +18,13 @@ namespace Kernel
|
||||
public:
|
||||
using entry_t = void(*)(void*);
|
||||
|
||||
enum class State
|
||||
{
|
||||
NotStarted,
|
||||
Executing,
|
||||
Terminating,
|
||||
};
|
||||
|
||||
public:
|
||||
static BAN::ErrorOr<Thread*> create(entry_t, void* = nullptr, BAN::RefPtr<Process> = nullptr);
|
||||
~Thread();
|
||||
@@ -29,8 +36,9 @@ namespace Kernel
|
||||
uintptr_t rsp() const { return m_rsp; }
|
||||
uintptr_t rip() const { return m_rip; }
|
||||
|
||||
void set_started() { m_started = true; }
|
||||
bool started() const { return m_started; }
|
||||
void set_started() { ASSERT(m_state == State::NotStarted); m_state = State::Executing; }
|
||||
State state() const { return m_state; }
|
||||
void terminate() { m_state = State::Terminating; }
|
||||
|
||||
static Thread& current() ;
|
||||
BAN::RefPtr<Process> process();
|
||||
@@ -46,8 +54,10 @@ namespace Kernel
|
||||
uintptr_t m_rip = 0;
|
||||
uintptr_t m_rsp = 0;
|
||||
const pid_t m_tid = 0;
|
||||
bool m_started = false;
|
||||
State m_state { State::NotStarted };
|
||||
BAN::RefPtr<Process> m_process;
|
||||
|
||||
friend class Scheduler;
|
||||
};
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user