From 2bc9e09456ed544efba044a4734a8ef2d960aa08 Mon Sep 17 00:00:00 2001 From: Silent Date: Sun, 18 Aug 2019 14:51:18 +0200 Subject: [PATCH] Core/CPU: Do not yield to UI from CPU methods Core::RunAsCPUThread may be called from Qt signals, and if code yields to UI there then it results in infinite recursion --- Source/Core/Core/HW/CPU.cpp | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/Source/Core/Core/HW/CPU.cpp b/Source/Core/Core/HW/CPU.cpp index b8243a0452..28fabff2fb 100644 --- a/Source/Core/Core/HW/CPU.cpp +++ b/Source/Core/Core/HW/CPU.cpp @@ -183,10 +183,7 @@ void Stop() while (s_state_cpu_thread_active) { - std::cv_status status = - s_state_cpu_idle_cvar.wait_for(state_lock, std::chrono::milliseconds(100)); - if (status == std::cv_status::timeout) - Host_YieldToUI(); + s_state_cpu_idle_cvar.wait(state_lock); } RunAdjacentSystems(false); @@ -252,10 +249,7 @@ void EnableStepping(bool stepping) while (s_state_cpu_thread_active) { - std::cv_status status = - s_state_cpu_idle_cvar.wait_for(state_lock, std::chrono::milliseconds(100)); - if (status == std::cv_status::timeout) - Host_YieldToUI(); + s_state_cpu_idle_cvar.wait(state_lock); } RunAdjacentSystems(false); @@ -303,10 +297,7 @@ bool PauseAndLock(bool do_lock, bool unpause_on_unlock, bool control_adjacent) while (s_state_cpu_thread_active) { - std::cv_status status = - s_state_cpu_idle_cvar.wait_for(state_lock, std::chrono::milliseconds(100)); - if (status == std::cv_status::timeout) - Host_YieldToUI(); + s_state_cpu_idle_cvar.wait(state_lock); } if (control_adjacent)