Skip to content
Permalink
Browse files

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
  • Loading branch information
CookiePLMonster committed Aug 18, 2019
1 parent 7520306 commit 2bc9e09456ed544efba044a4734a8ef2d960aa08
Showing with 3 additions and 12 deletions.
  1. +3 −12 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)

0 comments on commit 2bc9e09

Please sign in to comment.
You can’t perform that action at this time.