ControllerInterface: Fix deadlock when Wii Remote disconnects
In UpdateInput, lock m_devices_population_mutex before m_devices_mutex to be consistent with other ControllerInterface functions. Normally the former lock isn't needed in UpdateInput, but when a Wii Remote disconnects it calls RemoveDevice which results in the mutexes being locked in the wrong order.
This commit is contained in:
parent
560a23957c
commit
d6a8e6caaf
|
@ -372,6 +372,14 @@ void ControllerInterface::UpdateInput()
|
|||
|
||||
// TODO: if we are an emulation input channel, we should probably always lock
|
||||
// Prefer outdated values over blocking UI or CPU thread (avoids short but noticeable frame drop)
|
||||
|
||||
// Lock this first to avoid deadlock with m_devices_mutex in certain cases (such as a Wii Remote
|
||||
// getting disconnected)
|
||||
if (!m_devices_population_mutex.try_lock())
|
||||
return;
|
||||
|
||||
std::lock_guard population_lock(m_devices_population_mutex, std::adopt_lock);
|
||||
|
||||
if (!m_devices_mutex.try_lock())
|
||||
return;
|
||||
|
||||
|
|
Loading…
Reference in New Issue