diff options
| author | Léo Lam <leo@innovatetechnologi.es> | 2019-07-11 17:28:19 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-07-11 17:28:19 +0200 |
| commit | 2f5e6cfff16bc9c6eff5800a009d23c1b98078ca (patch) | |
| tree | 5617a59307a1189a20a8e223efd3c22d112b5849 /Source/Core/InputCommon | |
| parent | 4c649d1a5d92ccb1cb106861d60d744b92188524 (diff) | |
| parent | e85fa26768cb4efbcec20dd32030c974e7e18c15 (diff) | |
Merge pull request #8218 from leoetlino/context
Use separate libusb contexts to avoid thread safety issues
Diffstat (limited to 'Source/Core/InputCommon')
| -rw-r--r-- | Source/Core/InputCommon/GCAdapter.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/Source/Core/InputCommon/GCAdapter.cpp b/Source/Core/InputCommon/GCAdapter.cpp index 493d8003f2..f54f85393c 100644 --- a/Source/Core/InputCommon/GCAdapter.cpp +++ b/Source/Core/InputCommon/GCAdapter.cpp @@ -72,6 +72,8 @@ static bool s_libusb_hotplug_enabled = false; static libusb_hotplug_callback_handle s_hotplug_handle; #endif +static LibusbUtils::Context s_libusb_context; + static u8 s_endpoint_in = 0; static u8 s_endpoint_out = 0; @@ -147,7 +149,6 @@ static int HotplugCallback(libusb_context* ctx, libusb_device* dev, libusb_hotpl static void ScanThreadFunc() { - auto& context = LibusbUtils::GetContext(); Common::SetCurrentThreadName("GC Adapter Scanning Thread"); NOTICE_LOG(SERIALINTERFACE, "GC Adapter scanning thread started"); @@ -158,7 +159,7 @@ static void ScanThreadFunc() if (s_libusb_hotplug_enabled) { if (libusb_hotplug_register_callback( - context, + s_libusb_context, (libusb_hotplug_event)(LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED | LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT), LIBUSB_HOTPLUG_ENUMERATE, 0x057e, 0x0337, LIBUSB_HOTPLUG_MATCH_ANY, HotplugCallback, @@ -212,7 +213,7 @@ void StartScanThread() { if (s_adapter_detect_thread_running.IsSet()) return; - if (!LibusbUtils::GetContext().IsValid()) + if (!s_libusb_context.IsValid()) return; s_adapter_detect_thread_running.Set(true); s_adapter_detect_thread = std::thread(ScanThreadFunc); @@ -240,7 +241,7 @@ static void Setup() s_controller_rumble[i] = 0; } - LibusbUtils::GetContext().GetDeviceList([](libusb_device* device) { + s_libusb_context.GetDeviceList([](libusb_device* device) { if (CheckDeviceAccess(device)) { // Only connect to a single adapter in case the user has multiple connected @@ -364,8 +365,8 @@ void Shutdown() { StopScanThread(); #if defined(LIBUSB_API_VERSION) && LIBUSB_API_VERSION >= 0x01000102 - if (LibusbUtils::GetContext().IsValid() && s_libusb_hotplug_enabled) - libusb_hotplug_deregister_callback(LibusbUtils::GetContext(), s_hotplug_handle); + if (s_libusb_context.IsValid() && s_libusb_hotplug_enabled) + libusb_hotplug_deregister_callback(s_libusb_context, s_hotplug_handle); #endif Reset(); |
