diff options
| author | Filoppi <filippotarpini@hotmail.it> | 2021-11-17 22:55:02 +0200 |
|---|---|---|
| committer | Filoppi <filippotarpini@hotmail.it> | 2021-11-20 16:54:36 +0200 |
| commit | 1badceb455dae28a93a51da6c5cda0b510f93701 (patch) | |
| tree | e201ca4322301d160dd49e2c31aa40c3f72c4ca3 /Source/Core/InputCommon/ControllerInterface/CoreDevice.cpp | |
| parent | 0b81640dd1ce436519368556a69eb7fc650a60fa (diff) | |
ControllerInterface: fix UpdateReferences() deadlock
Removed useless locks to DeviceContainer::m_devices_mutex, as they were all already protected by m_devices_population_mutex.
We have no interest in blocking other threads that were potentially reading devices at the same time so this seems fine.
This simplifies the code, and I've adjusted a few comments which mentioned possible deadlock that should now be totally gone.
The deadlock could have happen if a thread directly called EmulatedController::UpdateReferences(), while another another thread also reached EmulatedController::UpdateReferences() within a call to ControllerInterface::UpdateDevices(), as the mentioned function locked both the DeviceContainer::m_devices_mutex and s_get_state_mutex at the same time.
The deadlock was frequent on game emulation startup on Android, due to the UpdateReferences() call in InputConfig::LoadConfig() and the UI thread triggering calls to ControllerInterface::UpdateDevices().
It could also have happened on Desktop if a user pressed "Refresh Devices" manually in the UI while the input config was loading.
Also brought some UpdateReferences() comments and thread safety fixes from https://github.com/dolphin-emu/dolphin/pull/9489
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface/CoreDevice.cpp')
0 files changed, 0 insertions, 0 deletions
