summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/Core/HW/CPU.cpp2
-rw-r--r--Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp6
2 files changed, 6 insertions, 2 deletions
diff --git a/Source/Core/Core/HW/CPU.cpp b/Source/Core/Core/HW/CPU.cpp
index ff3c39d572..f583cc3dfe 100644
--- a/Source/Core/Core/HW/CPU.cpp
+++ b/Source/Core/Core/HW/CPU.cpp
@@ -150,9 +150,9 @@ bool CCPU::PauseAndLock(bool doLock, bool unpauseOnUnlock)
if (doLock)
{
// we can't use EnableStepping, that would causes deadlocks with both audio and video
+ PowerPC::Pause();
if (!Core::IsCPUThread())
m_csCpuOccupied.lock();
- PowerPC::Pause();
}
else
{
diff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp
index f64ab52769..319a6bddb7 100644
--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp
+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp
@@ -829,7 +829,10 @@ void ControlChannel(int _WiimoteNumber, u16 _channelID, const void* _pData, u32
// Read the Wiimote once
void Update(int _WiimoteNumber)
{
- std::lock_guard<std::recursive_mutex> lk(g_refresh_lock);
+ // Try to get a lock and return without doing anything if we fail
+ // This avoids deadlocks when adding a Wiimote during continuous scan
+ if(!g_refresh_lock.try_lock())
+ return;
if (g_wiimotes[_WiimoteNumber])
g_wiimotes[_WiimoteNumber]->Update();
@@ -839,6 +842,7 @@ void Update(int _WiimoteNumber)
{
Host_ConnectWiimote(_WiimoteNumber, false);
}
+ g_refresh_lock.unlock();
}
void StateChange(EMUSTATE_CHANGE newState)