diff --git a/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp b/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp index 9e3c7ba7af..328258a8b2 100644 --- a/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp +++ b/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp @@ -47,6 +47,7 @@ void ControllerInterface::Initialize(void* const hwnd) return; m_hwnd = hwnd; + m_is_populating_devices = true; #ifdef CIFACE_USE_DINPUT // nothing needed @@ -88,6 +89,8 @@ void ControllerInterface::RefreshDevices() m_devices.clear(); } + m_is_populating_devices = true; + #ifdef CIFACE_USE_DINPUT ciface::DInput::PopulateDevices(reinterpret_cast(m_hwnd)); #endif @@ -113,6 +116,9 @@ void ControllerInterface::RefreshDevices() #ifdef CIFACE_USE_PIPES ciface::Pipes::PopulateDevices(); #endif + + m_is_populating_devices = false; + InvokeDevicesChangedCallbacks(); } // @@ -188,7 +194,9 @@ void ControllerInterface::AddDevice(std::shared_ptr device NOTICE_LOG(SERIALINTERFACE, "Added device: %s", device->GetQualifiedName().c_str()); m_devices.emplace_back(std::move(device)); } - InvokeDevicesChangedCallbacks(); + + if (!m_is_populating_devices) + InvokeDevicesChangedCallbacks(); } void ControllerInterface::RemoveDevice(std::function callback) @@ -205,7 +213,9 @@ void ControllerInterface::RemoveDevice(std::function #include #include #include @@ -57,6 +58,7 @@ private: std::vector> m_devices_changed_callbacks; mutable std::mutex m_callbacks_mutex; bool m_is_init; + std::atomic m_is_populating_devices{false}; void* m_hwnd; };