From b3dcabb680fe2300d10d1aa6375af14d9bcdca79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Thu, 17 Sep 2026 20:31:13 +0200 Subject: [PATCH] [Client] Exit deterministically when launching the update installer --- .../src/interface/widgets/dialogs/dlg_update.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_update.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_update.cpp index 7cf58d3e0..b7d6c5296 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_update.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_update.cpp @@ -5,11 +5,13 @@ #include "../client/network/update/client/release_channel.h" #include "../interface/window_main.h" +#include #include #include #include #include #include +#include #include #include #include @@ -240,8 +242,14 @@ void DlgUpdate::downloadSuccessful(const QUrl &filepath) // Try to open the installer. If it opens, quit Cockatrice if (process.startDetached()) { - QMetaObject::invokeMethod(static_cast(parent()), "close", Qt::QueuedConnection); qCInfo(DlgUpdateLog) << "Opened downloaded update file successfully - closing Cockatrice"; + // Close the main window synchronously so settings are saved and file locks are released + // before the NSIS installer (already launched) starts replacing files, then quit the + // application for real in case the close was suppressed (e.g. by a pending prompt). + if (auto *window = qobject_cast(parent())) { + window->close(); + } + QTimer::singleShot(0, qApp, &QCoreApplication::quit); close(); } else { setLabel(tr("Error"));