From 3a883f28d675f971509c165cfedeba861ecdd48a Mon Sep 17 00:00:00 2001 From: Dentomologist Date: Fri, 25 Apr 2025 12:16:26 -0700 Subject: [PATCH] Config: Add [[nodiscard]] to AddConfigChangedCallback Require callers of Config::AddConfigChangedCallback and CPUThreadConfigCallback::AddConfigChangedCallback to handle the returned ConfigChangedCallbackIDs to hopefully prevent future issues with callbacks getting called after their associated objects have been destroyed. --- Source/Core/Common/Config/Config.h | 6 +++--- Source/Core/Core/CPUThreadConfigCallback.h | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Source/Core/Common/Config/Config.h b/Source/Core/Common/Config/Config.h index d7b370282a..ea6058a8d3 100644 --- a/Source/Core/Common/Config/Config.h +++ b/Source/Core/Common/Config/Config.h @@ -29,9 +29,9 @@ void AddLayer(std::unique_ptr loader); std::shared_ptr GetLayer(LayerType layer); void RemoveLayer(LayerType layer); -// Returns an ID that can be passed to RemoveConfigChangedCallback(). -// The callback may be called from any thread. -ConfigChangedCallbackID AddConfigChangedCallback(ConfigChangedCallback func); +// Returns an ID that should be passed to RemoveConfigChangedCallback() when the callback is no +// longer needed. The callback may be called from any thread. +[[nodiscard]] ConfigChangedCallbackID AddConfigChangedCallback(ConfigChangedCallback func); void RemoveConfigChangedCallback(ConfigChangedCallbackID callback_id); void OnConfigChanged(); diff --git a/Source/Core/Core/CPUThreadConfigCallback.h b/Source/Core/Core/CPUThreadConfigCallback.h index 3fb57de89a..03070f76c7 100644 --- a/Source/Core/Core/CPUThreadConfigCallback.h +++ b/Source/Core/Core/CPUThreadConfigCallback.h @@ -18,8 +18,9 @@ struct ConfigChangedCallbackID bool operator==(const ConfigChangedCallbackID&) const = default; }; -// returns an ID that can be passed to RemoveConfigChangedCallback() -ConfigChangedCallbackID AddConfigChangedCallback(Config::ConfigChangedCallback func); +// Returns an ID that should be passed to RemoveConfigChangedCallback() when the callback is no +// longer needed. +[[nodiscard]] ConfigChangedCallbackID AddConfigChangedCallback(Config::ConfigChangedCallback func); void RemoveConfigChangedCallback(ConfigChangedCallbackID callback_id);