diff options
author | Narr the Reg <juangerman-13@hotmail.com> | 2022-04-07 17:08:01 -0500 |
---|---|---|
committer | Narr the Reg <juangerman-13@hotmail.com> | 2022-04-07 17:08:01 -0500 |
commit | bbaa08d7f05816960204cbf0b1569972f0928199 (patch) | |
tree | 96ada42ea08419da38796dbb9c6c0e1cdbe171c4 /src/core/hid/emulated_controller.cpp | |
parent | 9c85cb354a6c00f82278e6c39d4b474c49dd4c5a (diff) |
core: hid: Fix double lock on softlock and forced updates
Diffstat (limited to 'src/core/hid/emulated_controller.cpp')
-rw-r--r-- | src/core/hid/emulated_controller.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/core/hid/emulated_controller.cpp b/src/core/hid/emulated_controller.cpp index d3b13dbbdb..c3f21066c2 100644 --- a/src/core/hid/emulated_controller.cpp +++ b/src/core/hid/emulated_controller.cpp @@ -1173,17 +1173,22 @@ DebugPadButton EmulatedController::GetDebugPadButtons() const { } AnalogSticks EmulatedController::GetSticks() const { - std::scoped_lock lock{mutex}; + std::unique_lock lock{mutex}; + if (is_configuring) { return {}; } + // Some drivers like stick from buttons need constant refreshing for (auto& device : stick_devices) { if (!device) { continue; } + lock.unlock(); device->SoftUpdate(); + lock.lock(); } + return controller.analog_stick_state; } @@ -1196,15 +1201,20 @@ NpadGcTriggerState EmulatedController::GetTriggers() const { } MotionState EmulatedController::GetMotions() const { - std::scoped_lock lock{mutex}; + std::unique_lock lock{mutex}; + + // Some drivers like mouse motion need constant refreshing if (force_update_motion) { for (auto& device : motion_devices) { if (!device) { continue; } + lock.unlock(); device->ForceUpdate(); + lock.lock(); } } + return controller.motion_state; } |