From f86bbc3b1d0b99543f4427b278e64d7543323e18 Mon Sep 17 00:00:00 2001 From: Dentomologist Date: Sun, 29 Mar 2026 17:29:36 -0700 Subject: [PATCH 1/2] AutoUpdate: Don't start redundant update checks Ignore any new update check requests if one is already in progress. --- Source/Core/UICommon/AutoUpdate.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Source/Core/UICommon/AutoUpdate.cpp b/Source/Core/UICommon/AutoUpdate.cpp index 668a991545..768f607803 100644 --- a/Source/Core/UICommon/AutoUpdate.cpp +++ b/Source/Core/UICommon/AutoUpdate.cpp @@ -3,6 +3,7 @@ #include "UICommon/AutoUpdate.h" +#include #include #include @@ -12,6 +13,7 @@ #include "Common/HttpRequest.h" #include "Common/Logging/Log.h" #include "Common/MsgHandler.h" +#include "Common/ScopeGuard.h" #include "Common/StringUtil.h" #include "Common/Version.h" @@ -36,6 +38,7 @@ namespace { +std::atomic_bool s_check_in_progress = false; bool s_update_triggered = false; #ifdef __APPLE__ @@ -188,6 +191,20 @@ static u32 GetOwnProcessId() void AutoUpdateChecker::CheckForUpdate(std::string_view update_track, std::string_view hash_override, const CheckType check_type) { + bool expected_check_in_progress = false; + if (!s_check_in_progress.compare_exchange_strong(expected_check_in_progress, true)) + return; + + Common::ScopeGuard guard([]() { s_check_in_progress.store(false); }); + + if (s_update_triggered) + { + if (check_type == CheckType::Manual) + SuccessAlertFmtT("A Dolphin update is already scheduled for the next time it closes."); + + return; + } + // Don't bother checking if updates are not supported or not enabled. if (!SystemSupportsAutoUpdates() || update_track.empty()) return; From 68ac3d651d94f904d8847dc3cefb85b2394aa0c6 Mon Sep 17 00:00:00 2001 From: Dentomologist Date: Sun, 29 Mar 2026 17:18:09 -0700 Subject: [PATCH 2/2] AutoUpdate: Only set triggered flag if process creation succeeds Don't set `s_update_triggered` if the updater process fails to be created. This will allow users in that situation to try to start an update later without having to restart Dolphin first. --- Source/Core/UICommon/AutoUpdate.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Source/Core/UICommon/AutoUpdate.cpp b/Source/Core/UICommon/AutoUpdate.cpp index 768f607803..4298382b32 100644 --- a/Source/Core/UICommon/AutoUpdate.cpp +++ b/Source/Core/UICommon/AutoUpdate.cpp @@ -278,7 +278,6 @@ void AutoUpdateChecker::TriggerUpdate(const AutoUpdateChecker::NewVersionInforma return; } - s_update_triggered = true; #ifdef OS_SUPPORTS_UPDATER std::map updater_flags; updater_flags["this-manifest-url"] = info.this_manifest_url; @@ -319,6 +318,7 @@ void AutoUpdateChecker::TriggerUpdate(const AutoUpdateChecker::NewVersionInforma { CloseHandle(pinfo.hThread); CloseHandle(pinfo.hProcess); + s_update_triggered = true; } else { @@ -331,6 +331,10 @@ void AutoUpdateChecker::TriggerUpdate(const AutoUpdateChecker::NewVersionInforma const std::string error = Common::LastStrerrorString(); CriticalAlertFmtT("Could not start updater process: {0}", error); } + else + { + s_update_triggered = true; + } #endif #endif