summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/kernel')
-rw-r--r--src/core/hle/kernel/kernel.cpp2
-rw-r--r--src/core/hle/kernel/scheduler.cpp8
-rw-r--r--src/core/hle/kernel/scheduler.h7
3 files changed, 17 insertions, 0 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp
index 002c5af2b..0d6286f84 100644
--- a/src/core/hle/kernel/kernel.cpp
+++ b/src/core/hle/kernel/kernel.cpp
@@ -116,6 +116,8 @@ struct KernelCore::Impl {
116 thread_wakeup_event_type = nullptr; 116 thread_wakeup_event_type = nullptr;
117 preemption_event = nullptr; 117 preemption_event = nullptr;
118 118
119 global_scheduler.Shutdown();
120
119 named_ports.clear(); 121 named_ports.clear();
120 } 122 }
121 123
diff --git a/src/core/hle/kernel/scheduler.cpp b/src/core/hle/kernel/scheduler.cpp
index 226d15d88..122106267 100644
--- a/src/core/hle/kernel/scheduler.cpp
+++ b/src/core/hle/kernel/scheduler.cpp
@@ -342,6 +342,14 @@ bool GlobalScheduler::AskForReselectionOrMarkRedundant(Thread* current_thread, T
342 } 342 }
343} 343}
344 344
345void GlobalScheduler::Shutdown() {
346 for (std::size_t core = 0; core < NUM_CPU_CORES; core++) {
347 scheduled_queue[core].clear();
348 suggested_queue[core].clear();
349 }
350 thread_list.clear();
351}
352
345GlobalScheduler::~GlobalScheduler() = default; 353GlobalScheduler::~GlobalScheduler() = default;
346 354
347Scheduler::Scheduler(Core::System& system, Core::ARM_Interface& cpu_core, u32 core_id) 355Scheduler::Scheduler(Core::System& system, Core::ARM_Interface& cpu_core, u32 core_id)
diff --git a/src/core/hle/kernel/scheduler.h b/src/core/hle/kernel/scheduler.h
index 408e20c88..617553ae3 100644
--- a/src/core/hle/kernel/scheduler.h
+++ b/src/core/hle/kernel/scheduler.h
@@ -147,6 +147,8 @@ public:
147 return reselection_pending.load(); 147 return reselection_pending.load();
148 } 148 }
149 149
150 void Shutdown();
151
150private: 152private:
151 bool AskForReselectionOrMarkRedundant(Thread* current_thread, Thread* winner); 153 bool AskForReselectionOrMarkRedundant(Thread* current_thread, Thread* winner);
152 154
@@ -189,6 +191,11 @@ public:
189 return context_switch_pending; 191 return context_switch_pending;
190 } 192 }
191 193
194 void Shutdown() {
195 current_thread = nullptr;
196 selected_thread = nullptr;
197 }
198
192private: 199private:
193 friend class GlobalScheduler; 200 friend class GlobalScheduler;
194 /** 201 /**