From 1cdc74c5e9236cca085544db6bc22106ffe97927 Mon Sep 17 00:00:00 2001
From: MerryMage <MerryMage@users.noreply.github.com>
Date: Wed, 21 Feb 2018 16:37:48 +0000
Subject: core: Fix scheduler-shutdown related crash

---
 src/core/core.cpp | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

(limited to 'src/core/core.cpp')

diff --git a/src/core/core.cpp b/src/core/core.cpp
index 8c5dd3761a..4fb0355569 100644
--- a/src/core/core.cpp
+++ b/src/core/core.cpp
@@ -139,6 +139,8 @@ void System::Reschedule() {
 System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) {
     LOG_DEBUG(HW_Memory, "initialized OK");
 
+    CoreTiming::Init();
+
     switch (Settings::values.cpu_core) {
     case Settings::CpuCore::Unicorn:
         cpu_core = std::make_shared<ARM_Unicorn>();
@@ -154,14 +156,13 @@ System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) {
         break;
     }
 
-    scheduler = std::make_unique<Kernel::Scheduler>(cpu_core.get());
     gpu_core = std::make_unique<Tegra::GPU>();
 
     telemetry_session = std::make_unique<Core::TelemetrySession>();
 
-    CoreTiming::Init();
     HW::Init();
     Kernel::Init(system_mode);
+    scheduler = std::make_unique<Kernel::Scheduler>(cpu_core.get());
     Service::Init();
     GDBStub::Init();
 
@@ -189,15 +190,18 @@ void System::Shutdown() {
                          perf_results.frametime * 1000.0);
 
     // Shutdown emulation session
-    GDBStub::Shutdown();
     VideoCore::Shutdown();
+    GDBStub::Shutdown();
     Service::Shutdown();
+    scheduler = nullptr;
     Kernel::Shutdown();
     HW::Shutdown();
-    CoreTiming::Shutdown();
+    telemetry_session = nullptr;
+    gpu_core = nullptr;
     cpu_core = nullptr;
+    CoreTiming::Shutdown();
+
     app_loader = nullptr;
-    telemetry_session = nullptr;
 
     LOG_DEBUG(Core, "Shutdown OK");
 }
-- 
cgit v1.2.3-70-g09d2