From 999b5d181fedb8dba5c4d22e0c29d0a4fd201b4e Mon Sep 17 00:00:00 2001 From: cathery Date: Wed, 11 Mar 2020 01:16:41 +0300 Subject: [PATCH] Add mutex locks to usb queries --- source/Sysmodule/source/usb_module.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/Sysmodule/source/usb_module.cpp b/source/Sysmodule/source/usb_module.cpp index d634742..38ba5ec 100644 --- a/source/Sysmodule/source/usb_module.cpp +++ b/source/Sysmodule/source/usb_module.cpp @@ -20,6 +20,8 @@ namespace syscon::usb constexpr size_t MaxUsbHsInterfacesSize = 16; + ams::os::Mutex usbMutex; + void UsbEventThreadFunc(void *arg); void UsbDs3EventThreadFunc(void *arg); void UsbDs4EventThreadFunc(void *arg); @@ -47,6 +49,8 @@ namespace syscon::usb if (R_SUCCEEDED(eventWait(&g_usbCatchAllEvent, U64_MAX))) { WriteToLog("Catch-all event went off"); + + std::scoped_lock usbLock(usbMutex); if (!controllers::IsAtControllerLimit()) { s32 total_entries; @@ -74,6 +78,8 @@ namespace syscon::usb if (R_SUCCEEDED(eventWait(&g_usbDualshock3Event, U64_MAX))) { WriteToLog("Dualshock 3 event went off"); + + std::scoped_lock usbLock(usbMutex); if (!controllers::IsAtControllerLimit()) { s32 total_entries; @@ -91,6 +97,8 @@ namespace syscon::usb if (R_SUCCEEDED(eventWait(&g_usbDualshock4Event, U64_MAX))) { WriteToLog("Dualshock 4 event went off"); + + std::scoped_lock usbLock(usbMutex); if (!controllers::IsAtControllerLimit()) { s32 total_entries; @@ -109,6 +117,8 @@ namespace syscon::usb { s32 total_entries; WriteToLog("Interface state was changed"); + + std::scoped_lock usbLock(usbMutex); eventClear(usbHsGetInterfaceStateChangeEvent()); if (R_SUCCEEDED(usbHsQueryAcquiredInterfaces(interfaces, sizeof(interfaces), &total_entries))) {