summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon
diff options
context:
space:
mode:
authorAdmiral H. Curtiss <pikachu025@gmail.com>2022-09-07 22:37:14 +0200
committerAdmiral H. Curtiss <pikachu025@gmail.com>2022-09-07 22:37:24 +0200
commitb8ca1b2907230f2e1285bfdb9c5e3b373d49cf56 (patch)
treeb8af6b32f56169d2c6ef4ce8670407af6538adce /Source/Core/InputCommon
parent48c9c224cf9f82f0f9f2690b7cc6283d7448480c (diff)
InputCommon: Fix deadlock in EmulatedController::UpdateReferences().
Diffstat (limited to 'Source/Core/InputCommon')
-rw-r--r--Source/Core/InputCommon/ControllerEmu/ControllerEmu.cpp2
-rw-r--r--Source/Core/InputCommon/ControllerInterface/CoreDevice.h2
2 files changed, 3 insertions, 1 deletions
diff --git a/Source/Core/InputCommon/ControllerEmu/ControllerEmu.cpp b/Source/Core/InputCommon/ControllerEmu/ControllerEmu.cpp
index 7aec56115c..0a3de3e391 100644
--- a/Source/Core/InputCommon/ControllerEmu/ControllerEmu.cpp
+++ b/Source/Core/InputCommon/ControllerEmu/ControllerEmu.cpp
@@ -40,7 +40,7 @@ std::unique_lock<std::recursive_mutex> EmulatedController::GetStateLock()
void EmulatedController::UpdateReferences(const ControllerInterface& devi)
{
- const auto lock = GetStateLock();
+ std::scoped_lock lk(s_get_state_mutex, devi.GetDevicesMutex());
m_default_device_is_connected = devi.HasConnectedDevice(m_default_device);
diff --git a/Source/Core/InputCommon/ControllerInterface/CoreDevice.h b/Source/Core/InputCommon/ControllerInterface/CoreDevice.h
index 227a1febbe..2280ddac3b 100644
--- a/Source/Core/InputCommon/ControllerInterface/CoreDevice.h
+++ b/Source/Core/InputCommon/ControllerInterface/CoreDevice.h
@@ -238,6 +238,8 @@ public:
std::chrono::milliseconds confirmation_wait,
std::chrono::milliseconds maximum_wait) const;
+ std::recursive_mutex& GetDevicesMutex() const { return m_devices_mutex; }
+
protected:
// Exclusively needed when reading/writing "m_devices"
mutable std::recursive_mutex m_devices_mutex;