Linux: Fixed crashes/lock ups when closing while debugger is opened

This commit is contained in:
Sour 2019-07-18 18:35:14 -04:00
parent 2a28cfc344
commit 22ed5f31d8
2 changed files with 24 additions and 6 deletions

View file

@ -153,9 +153,13 @@ extern "C" {
_console->Resume(); _console->Resume();
} }
DllExport void __stdcall IsPaused() DllExport bool __stdcall IsPaused()
{ {
_console->IsPaused(); shared_ptr<Console> console = _console;
if(console) {
return console->IsPaused();
}
return true;
} }
DllExport void __stdcall Reset() DllExport void __stdcall Reset()

View file

@ -97,24 +97,38 @@ namespace Mesen.GUI.Forms
this.Resize += frmMain_Resize; this.Resize += frmMain_Resize;
} }
private bool _shuttingDown = false;
protected override void OnFormClosing(FormClosingEventArgs e) protected override void OnFormClosing(FormClosingEventArgs e)
{ {
base.OnFormClosing(e); base.OnFormClosing(e);
DebugApi.ResumeExecution(); InBackgroundHelper.StopBackgroundTimer();
DebugWindowManager.CloseAll();
EmuApi.Stop();
if(_notifListener != null) { if(_notifListener != null) {
_notifListener.Dispose(); _notifListener.Dispose();
_notifListener = null; _notifListener = null;
} }
if(!_shuttingDown && Program.IsMono) {
//This appears to prevent Mono from locking up when closing the form
DebugApi.ResumeExecution();
DebugWindowManager.CloseAll();
Task.Run(() => {
EmuApi.Stop();
_shuttingDown = true;
this.BeginInvoke((Action)(() => this.Close()));
});
e.Cancel = true;
return;
}
ConfigManager.Config.WindowLocation = this.WindowState == FormWindowState.Normal ? this.Location : this.RestoreBounds.Location; ConfigManager.Config.WindowLocation = this.WindowState == FormWindowState.Normal ? this.Location : this.RestoreBounds.Location;
ConfigManager.Config.WindowSize = this.WindowState == FormWindowState.Normal ? this.Size : this.RestoreBounds.Size; ConfigManager.Config.WindowSize = this.WindowState == FormWindowState.Normal ? this.Size : this.RestoreBounds.Size;
ConfigManager.ApplyChanges(); ConfigManager.ApplyChanges();
ConfigManager.SaveConfig();
EmuApi.Stop();
EmuApi.Release(); EmuApi.Release();
} }