diff options
Diffstat (limited to 'src/core/hle/kernel')
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/scheduler.cpp | 8 | ||||
| -rw-r--r-- | src/core/hle/kernel/scheduler.h | 7 |
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 | ||
| 345 | void 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 | |||
| 345 | GlobalScheduler::~GlobalScheduler() = default; | 353 | GlobalScheduler::~GlobalScheduler() = default; |
| 346 | 354 | ||
| 347 | Scheduler::Scheduler(Core::System& system, Core::ARM_Interface& cpu_core, u32 core_id) | 355 | Scheduler::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 | |||
| 150 | private: | 152 | private: |
| 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 | |||
| 192 | private: | 199 | private: |
| 193 | friend class GlobalScheduler; | 200 | friend class GlobalScheduler; |
| 194 | /** | 201 | /** |