From 691175aaaa9e6dbfea825bc80c2cad1e7514ab7e Mon Sep 17 00:00:00 2001 From: Sour Date: Sat, 16 Feb 2019 01:22:31 -0500 Subject: [PATCH] Stop and cleanup properly when closing application (to fix crash) --- Core/Console.cpp | 13 +++++++++++++ Core/Console.h | 1 + InteropDLL/EmuApiWrapper.cpp | 4 +--- UI/Forms/frmMain.cs | 8 ++++++++ UI/Interop/EmuApi.cs | 1 + 5 files changed, 24 insertions(+), 3 deletions(-) diff --git a/Core/Console.cpp b/Core/Console.cpp index db6504e..3da132d 100644 --- a/Core/Console.cpp +++ b/Core/Console.cpp @@ -21,6 +21,19 @@ void Console::Initialize() _videoRenderer->StartThread(); } +void Console::Release() +{ + Stop(); + + _videoDecoder->StopThread(); + _videoRenderer->StopThread(); + + _videoDecoder.reset(); + _videoRenderer.reset(); + _debugHud.reset(); + _notificationManager.reset(); +} + void Console::Run() { if(!_cpu) { diff --git a/Core/Console.h b/Core/Console.h index a30b764..01ef0ae 100644 --- a/Core/Console.h +++ b/Core/Console.h @@ -34,6 +34,7 @@ private: public: void Initialize(); + void Release(); void Run(); void Stop(); diff --git a/InteropDLL/EmuApiWrapper.cpp b/InteropDLL/EmuApiWrapper.cpp index bbc65a5..ede4619 100644 --- a/InteropDLL/EmuApiWrapper.cpp +++ b/InteropDLL/EmuApiWrapper.cpp @@ -154,15 +154,13 @@ namespace InteropEmu { DllExport void __stdcall Release() { - //_shortcutKeyHandler.reset(); - _console->Stop(); _renderer.reset(); _soundManager.reset(); _keyManager.reset(); - //_console->Release(true); + _console->Release(); _console.reset(); //_shortcutKeyHandler.reset(); diff --git a/UI/Forms/frmMain.cs b/UI/Forms/frmMain.cs index 73e928d..dcb50ea 100644 --- a/UI/Forms/frmMain.cs +++ b/UI/Forms/frmMain.cs @@ -29,6 +29,14 @@ namespace Mesen.GUI.Forms EmuApi.InitializeEmu(ConfigManager.HomeFolder, Handle, ctrlRenderer.Handle, false, false, false); } + protected override void OnFormClosing(FormClosingEventArgs e) + { + base.OnFormClosing(e); + + EmuApi.Stop(); + EmuApi.Release(); + } + private void mnuTraceLogger_Click(object sender, EventArgs e) { frmTraceLogger frm = new frmTraceLogger(); diff --git a/UI/Interop/EmuApi.cs b/UI/Interop/EmuApi.cs index cde8024..9f3339e 100644 --- a/UI/Interop/EmuApi.cs +++ b/UI/Interop/EmuApi.cs @@ -27,6 +27,7 @@ namespace Mesen.GUI [DllImport(DllPath)] public static extern void Release(); [DllImport(DllPath)] public static extern void Run(); + [DllImport(DllPath)] public static extern void Stop(); [DllImport(DllPath)] public static extern void LoadRom( [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(Utf8Marshaler))]string filepath,