summaryrefslogtreecommitdiffstats
path: root/src/core/hid/emulated_controller.cpp
diff options
context:
space:
mode:
authorFernando S <fsahmkow27@gmail.com>2023-09-29 13:36:57 +0200
committerGitHub <noreply@github.com>2023-09-29 13:36:57 +0200
commitd6b3e7f195dcf9a154f4e1ff84c6a1b46ad5bdfc (patch)
tree936eb95eb694f525ba7daaabc89404fc4a5ea557 /src/core/hid/emulated_controller.cpp
parentMerge pull request #11622 from liamwhite/qcr-reg1 (diff)
parentReduce core timing mutex contention (diff)
downloadyuzu-d6b3e7f195dcf9a154f4e1ff84c6a1b46ad5bdfc.tar
yuzu-d6b3e7f195dcf9a154f4e1ff84c6a1b46ad5bdfc.tar.gz
yuzu-d6b3e7f195dcf9a154f4e1ff84c6a1b46ad5bdfc.tar.bz2
yuzu-d6b3e7f195dcf9a154f4e1ff84c6a1b46ad5bdfc.tar.lz
yuzu-d6b3e7f195dcf9a154f4e1ff84c6a1b46ad5bdfc.tar.xz
yuzu-d6b3e7f195dcf9a154f4e1ff84c6a1b46ad5bdfc.tar.zst
yuzu-d6b3e7f195dcf9a154f4e1ff84c6a1b46ad5bdfc.zip
Diffstat (limited to 'src/core/hid/emulated_controller.cpp')
-rw-r--r--src/core/hid/emulated_controller.cpp11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/core/hid/emulated_controller.cpp b/src/core/hid/emulated_controller.cpp
index 94bd656fe..2af3f06fc 100644
--- a/src/core/hid/emulated_controller.cpp
+++ b/src/core/hid/emulated_controller.cpp
@@ -542,6 +542,7 @@ void EmulatedController::UnloadInput() {
}
void EmulatedController::EnableConfiguration() {
+ std::scoped_lock lock{connect_mutex, npad_mutex};
is_configuring = true;
tmp_is_connected = is_connected;
tmp_npad_type = npad_type;
@@ -1556,7 +1557,7 @@ void EmulatedController::Connect(bool use_temporary_value) {
auto trigger_guard =
SCOPE_GUARD({ TriggerOnChange(ControllerTriggerType::Connected, !is_configuring); });
- std::scoped_lock lock{mutex};
+ std::scoped_lock lock{connect_mutex, mutex};
if (is_configuring) {
tmp_is_connected = true;
return;
@@ -1572,7 +1573,7 @@ void EmulatedController::Connect(bool use_temporary_value) {
void EmulatedController::Disconnect() {
auto trigger_guard =
SCOPE_GUARD({ TriggerOnChange(ControllerTriggerType::Disconnected, !is_configuring); });
- std::scoped_lock lock{mutex};
+ std::scoped_lock lock{connect_mutex, mutex};
if (is_configuring) {
tmp_is_connected = false;
return;
@@ -1586,7 +1587,7 @@ void EmulatedController::Disconnect() {
}
bool EmulatedController::IsConnected(bool get_temporary_value) const {
- std::scoped_lock lock{mutex};
+ std::scoped_lock lock{connect_mutex};
if (get_temporary_value && is_configuring) {
return tmp_is_connected;
}
@@ -1599,7 +1600,7 @@ NpadIdType EmulatedController::GetNpadIdType() const {
}
NpadStyleIndex EmulatedController::GetNpadStyleIndex(bool get_temporary_value) const {
- std::scoped_lock lock{mutex};
+ std::scoped_lock lock{npad_mutex};
if (get_temporary_value && is_configuring) {
return tmp_npad_type;
}
@@ -1609,7 +1610,7 @@ NpadStyleIndex EmulatedController::GetNpadStyleIndex(bool get_temporary_value) c
void EmulatedController::SetNpadStyleIndex(NpadStyleIndex npad_type_) {
auto trigger_guard =
SCOPE_GUARD({ TriggerOnChange(ControllerTriggerType::Type, !is_configuring); });
- std::scoped_lock lock{mutex};
+ std::scoped_lock lock{mutex, npad_mutex};
if (is_configuring) {
if (tmp_npad_type == npad_type_) {