core: hid: Fix double lock on softlock and forced updates

This commit is contained in:
Narr the Reg 2022-04-07 17:08:01 -05:00
parent 9c85cb354a
commit bbaa08d7f0

View file

@ -1173,17 +1173,22 @@ DebugPadButton EmulatedController::GetDebugPadButtons() const {
} }
AnalogSticks EmulatedController::GetSticks() const { AnalogSticks EmulatedController::GetSticks() const {
std::scoped_lock lock{mutex}; std::unique_lock lock{mutex};
if (is_configuring) { if (is_configuring) {
return {}; return {};
} }
// Some drivers like stick from buttons need constant refreshing // Some drivers like stick from buttons need constant refreshing
for (auto& device : stick_devices) { for (auto& device : stick_devices) {
if (!device) { if (!device) {
continue; continue;
} }
lock.unlock();
device->SoftUpdate(); device->SoftUpdate();
lock.lock();
} }
return controller.analog_stick_state; return controller.analog_stick_state;
} }
@ -1196,15 +1201,20 @@ NpadGcTriggerState EmulatedController::GetTriggers() const {
} }
MotionState EmulatedController::GetMotions() 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) { if (force_update_motion) {
for (auto& device : motion_devices) { for (auto& device : motion_devices) {
if (!device) { if (!device) {
continue; continue;
} }
lock.unlock();
device->ForceUpdate(); device->ForceUpdate();
lock.lock();
} }
} }
return controller.motion_state; return controller.motion_state;
} }