Kernel Scheduler: Make sure the global scheduler shutdowns correctly.
This commit is contained in:
parent
b3c1deba49
commit
25f8606a6d
7 changed files with 31 additions and 0 deletions
|
@ -116,6 +116,8 @@ struct KernelCore::Impl {
|
|||
thread_wakeup_event_type = nullptr;
|
||||
preemption_event = nullptr;
|
||||
|
||||
global_scheduler.Shutdown();
|
||||
|
||||
named_ports.clear();
|
||||
}
|
||||
|
||||
|
|
|
@ -342,6 +342,14 @@ bool GlobalScheduler::AskForReselectionOrMarkRedundant(Thread* current_thread, T
|
|||
}
|
||||
}
|
||||
|
||||
void GlobalScheduler::Shutdown() {
|
||||
for (std::size_t core = 0; core < NUM_CPU_CORES; core++) {
|
||||
scheduled_queue[core].clear();
|
||||
suggested_queue[core].clear();
|
||||
}
|
||||
thread_list.clear();
|
||||
}
|
||||
|
||||
GlobalScheduler::~GlobalScheduler() = default;
|
||||
|
||||
Scheduler::Scheduler(Core::System& system, Core::ARM_Interface& cpu_core, u32 core_id)
|
||||
|
|
|
@ -147,6 +147,8 @@ public:
|
|||
return reselection_pending.load();
|
||||
}
|
||||
|
||||
void Shutdown();
|
||||
|
||||
private:
|
||||
bool AskForReselectionOrMarkRedundant(Thread* current_thread, Thread* winner);
|
||||
|
||||
|
@ -189,6 +191,11 @@ public:
|
|||
return context_switch_pending;
|
||||
}
|
||||
|
||||
void Shutdown() {
|
||||
current_thread = nullptr;
|
||||
selected_thread = nullptr;
|
||||
}
|
||||
|
||||
private:
|
||||
friend class GlobalScheduler;
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue