summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon
diff options
context:
space:
mode:
authorLéo Lam <leo@innovatetechnologi.es>2019-07-11 17:28:19 +0200
committerGitHub <noreply@github.com>2019-07-11 17:28:19 +0200
commit2f5e6cfff16bc9c6eff5800a009d23c1b98078ca (patch)
tree5617a59307a1189a20a8e223efd3c22d112b5849 /Source/Core/InputCommon
parent4c649d1a5d92ccb1cb106861d60d744b92188524 (diff)
parente85fa26768cb4efbcec20dd32030c974e7e18c15 (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.cpp13
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();