From f9c6eb7b9856239e8b62023de570187d304836de Mon Sep 17 00:00:00 2001 From: TellowKrinkle Date: Tue, 31 May 2022 20:17:01 -0500 Subject: [PATCH] InputCommon/ControllerEmu: Use more locks Loading configs while another thread is messing with stuff just doesn't feel like a good idea Hopefully fixes Wiimote Scanning Thread crashes on startup --- Source/Core/InputCommon/ControllerEmu/ControllerEmu.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/Core/InputCommon/ControllerEmu/ControllerEmu.cpp b/Source/Core/InputCommon/ControllerEmu/ControllerEmu.cpp index 9cd7ced6f9..7aec56115c 100644 --- a/Source/Core/InputCommon/ControllerEmu/ControllerEmu.cpp +++ b/Source/Core/InputCommon/ControllerEmu/ControllerEmu.cpp @@ -40,6 +40,8 @@ std::unique_lock EmulatedController::GetStateLock() void EmulatedController::UpdateReferences(const ControllerInterface& devi) { + const auto lock = GetStateLock(); + m_default_device_is_connected = devi.HasConnectedDevice(m_default_device); ciface::ExpressionParser::ControlEnvironment env(devi, GetDefaultDevice(), m_expression_vars); @@ -138,6 +140,7 @@ void EmulatedController::SetDefaultDevice(ciface::Core::DeviceQualifier devq) void EmulatedController::LoadConfig(IniFile::Section* sec, const std::string& base) { + const auto lock = GetStateLock(); std::string defdev = GetDefaultDevice().ToString(); if (base.empty()) { @@ -151,6 +154,7 @@ void EmulatedController::LoadConfig(IniFile::Section* sec, const std::string& ba void EmulatedController::SaveConfig(IniFile::Section* sec, const std::string& base) { + const auto lock = GetStateLock(); const std::string defdev = GetDefaultDevice().ToString(); if (base.empty()) sec->Set(/*std::string(" ") +*/ base + "Device", defdev, ""); @@ -161,6 +165,7 @@ void EmulatedController::SaveConfig(IniFile::Section* sec, const std::string& ba void EmulatedController::LoadDefaults(const ControllerInterface& ciface) { + const auto lock = GetStateLock(); // load an empty inifile section, clears everything IniFile::Section sec; LoadConfig(&sec);