From d0dc8ae5e1bfeec1dd3d19c5ddd532ac4156b66b Mon Sep 17 00:00:00 2001 From: Dentomologist Date: Fri, 25 Apr 2025 15:11:53 -0700 Subject: [PATCH] FreeLook: Remove ConfigChangedCallback on shutdown --- Source/Core/Core/FreeLookConfig.cpp | 20 ++++++++++++++++---- Source/Core/Core/FreeLookConfig.h | 1 + Source/Core/Core/FreeLookManager.cpp | 3 ++- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/Source/Core/Core/FreeLookConfig.cpp b/Source/Core/Core/FreeLookConfig.cpp index a74b492f7d..56aadb9af2 100644 --- a/Source/Core/Core/FreeLookConfig.cpp +++ b/Source/Core/Core/FreeLookConfig.cpp @@ -3,6 +3,8 @@ #include "Core/FreeLookConfig.h" +#include + #include "Core/AchievementManager.h" #include "Core/CPUThreadConfigCallback.h" #include "Core/Config/AchievementSettings.h" @@ -14,7 +16,8 @@ namespace FreeLook { static Config s_config; static Config s_active_config; -static bool s_has_registered_callback = false; +static std::optional + s_config_changed_callback_id = std::nullopt; Config& GetConfig() { @@ -39,14 +42,23 @@ Config::Config() void Config::Refresh() { - if (!s_has_registered_callback) + if (!s_config_changed_callback_id.has_value()) { - CPUThreadConfigCallback::AddConfigChangedCallback([] { s_config.Refresh(); }); - s_has_registered_callback = true; + s_config_changed_callback_id = + CPUThreadConfigCallback::AddConfigChangedCallback([] { s_config.Refresh(); }); } camera_config.control_type = ::Config::Get(::Config::FL1_CONTROL_TYPE); enabled = ::Config::Get(::Config::FREE_LOOK_ENABLED) && !AchievementManager::GetInstance().IsHardcoreModeActive(); } + +void Config::Shutdown() +{ + if (!s_config_changed_callback_id.has_value()) + return; + + CPUThreadConfigCallback::RemoveConfigChangedCallback(*s_config_changed_callback_id); + s_config_changed_callback_id.reset(); +} } // namespace FreeLook diff --git a/Source/Core/Core/FreeLookConfig.h b/Source/Core/Core/FreeLookConfig.h index b6c241ae34..5819d81269 100644 --- a/Source/Core/Core/FreeLookConfig.h +++ b/Source/Core/Core/FreeLookConfig.h @@ -27,6 +27,7 @@ struct Config final { Config(); void Refresh(); + void Shutdown(); CameraConfig camera_config; bool enabled; diff --git a/Source/Core/Core/FreeLookManager.cpp b/Source/Core/Core/FreeLookManager.cpp index 0eb85a5d33..58b71b708f 100644 --- a/Source/Core/Core/FreeLookManager.cpp +++ b/Source/Core/Core/FreeLookManager.cpp @@ -325,8 +325,9 @@ InputConfig* GetInputConfig() void Shutdown() { s_config.UnregisterHotplugCallback(); - s_config.ClearControllers(); + + GetConfig().Shutdown(); } void Initialize()