From adead8ea31a4c27aac511fa9dee9f47d8b6ad127 Mon Sep 17 00:00:00 2001 From: The Dax Date: Thu, 26 Sep 2013 22:44:29 -0400 Subject: [PATCH] Fix deadlocks when games hang with Stop, Reset, and Enable Cheats. --- Windows/WndMainWindow.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/Windows/WndMainWindow.cpp b/Windows/WndMainWindow.cpp index 2990f6e2d3..d85ec28bfd 100644 --- a/Windows/WndMainWindow.cpp +++ b/Windows/WndMainWindow.cpp @@ -1093,12 +1093,8 @@ namespace MainWindow break; case ID_EMULATION_STOP: - if (Core_IsStepping()) { - // If the current PC is on a breakpoint, disabling stepping doesn't work without - // explicitly skipping it - CBreakPoints::SetSkipFirst(currentMIPS->pc); - Core_EnableStepping(false); - } + Core_Stop(); + NativeMessageReceived("stop", ""); Update(); break; @@ -1111,8 +1107,13 @@ namespace MainWindow Core_EnableStepping(false); } + Core_EnableStepping(true); + Core_WaitInactive(); + Core_EnableStepping(false); + NativeMessageReceived("reset", ""); break; + case ID_EMULATION_CHEATS: g_Config.bEnableCheats = !g_Config.bEnableCheats; osm.ShowOnOff(g->T("Cheats"), g_Config.bEnableCheats); @@ -1124,6 +1125,10 @@ namespace MainWindow Core_EnableStepping(false); } + Core_EnableStepping(true); + Core_WaitInactive(); + Core_EnableStepping(false); + NativeMessageReceived("reset", ""); break;