Always create threads in CREATED state.

Simplify the process class to have threads marked as runnable
separately.
This commit is contained in:
Drew Galbraith 2023-06-06 16:27:25 -07:00
parent ef8eb5d993
commit b0c2a6732b
4 changed files with 7 additions and 13 deletions

View file

@ -21,7 +21,10 @@ SharedPtr<Process> Process::RootProcess() {
return proc;
}
Process::Process() : id_(gNextId++), state_(RUNNING) {}
Process::Process() : id_(gNextId++), state_(RUNNING) {
caps_.PushBack(new Capability(this, Capability::PROCESS, Z_INIT_PROC_SELF,
ZC_PROC_SPAWN_PROC | ZC_PROC_SPAWN_THREAD));
}
SharedPtr<Thread> Process::CreateThread() {
SharedPtr<Thread> thread{new Thread(*this, next_thread_id_++, 0)};
@ -29,15 +32,6 @@ SharedPtr<Thread> Process::CreateThread() {
return thread;
}
void Process::CreateThread(uint64_t entry) {
Thread* thread = new Thread(*this, next_thread_id_++, entry);
threads_.PushBack(thread);
caps_.PushBack(new Capability(this, Capability::PROCESS, Z_INIT_PROC_SELF,
ZC_PROC_SPAWN_PROC | ZC_PROC_SPAWN_THREAD));
thread->SetState(Thread::RUNNABLE);
gScheduler->Enqueue(thread);
}
SharedPtr<Thread> Process::GetThread(uint64_t tid) {
auto iter = threads_.begin();
while (iter != threads_.end()) {

View file

@ -25,7 +25,6 @@ class Process {
VirtualMemory& vmm() { return vmm_; }
SharedPtr<Thread> CreateThread();
void CreateThread(uint64_t entry);
SharedPtr<Thread> GetThread(uint64_t tid);
SharedPtr<Capability> GetCapability(uint64_t cid);