core: hid: Fix double lock on softlock and forced updates
This commit is contained in:
parent
9c85cb354a
commit
bbaa08d7f0
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in New Issue