Author: manx
Date: Tue Mar 26 14:18:31 2024
New Revision: 20470
URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=20470
Log:
[Fix] Update Check: Cancel running Update Check when exiting OpenMPT and wait for the Update Check thread to exit. Fixes <https://bugs.openmpt.org/view.php?id=1760>.
Modified:
trunk/OpenMPT/mptrack/MainFrm.cpp
trunk/OpenMPT/mptrack/Mainfrm.h
trunk/OpenMPT/mptrack/UpdateCheck.cpp
trunk/OpenMPT/mptrack/UpdateCheck.h
Modified: trunk/OpenMPT/mptrack/MainFrm.cpp
==============================================================================
--- trunk/OpenMPT/mptrack/MainFrm.cpp Sun Mar 24 19:18:34 2024 (r20469)
+++ trunk/OpenMPT/mptrack/MainFrm.cpp Tue Mar 26 14:18:31 2024 (r20470)
@@ -375,6 +375,10 @@
}
}
+#if defined(MPT_ENABLE_UPDATE)
+ m_cancelUpdateCheck = true;
+#endif // MPT_ENABLE_UPDATE
+
CChildFrame *pMDIActive = (CChildFrame *)MDIGetActive();
BeginWaitCursor();
@@ -400,6 +404,10 @@
m_InputHandler->m_activeCommandSet->SaveFile(TrackerSettings::Instance().m_szKbdFile);
}
+#if defined(MPT_ENABLE_UPDATE)
+ CUpdateCheck::WaitForUpdateCheckFinished();
+#endif // MPT_ENABLE_UPDATE
+
EndWaitCursor();
CMDIFrameWnd::OnClose();
}
@@ -2765,6 +2773,10 @@
LRESULT CMainFrame::OnUpdateCheckProgress(WPARAM wparam, LPARAM lparam)
{
+ if(m_cancelUpdateCheck)
+ {
+ return FALSE;
+ }
bool isAutoUpdate = wparam != 0;
CString updateText = MPT_CFORMAT("Checking for updates... {}%")(lparam);
if(isAutoUpdate)
Modified: trunk/OpenMPT/mptrack/Mainfrm.h
==============================================================================
--- trunk/OpenMPT/mptrack/Mainfrm.h Sun Mar 24 19:18:34 2024 (r20469)
+++ trunk/OpenMPT/mptrack/Mainfrm.h Tue Mar 26 14:18:31 2024 (r20470)
@@ -191,6 +191,7 @@
#if defined(MPT_ENABLE_UPDATE)
class CUpdateSetupDlg *m_UpdateOptionsDialog = nullptr;
std::unique_ptr<UpdateCheckResult> m_updateCheckResult;
+ bool m_cancelUpdateCheck = false;
#endif // MPT_ENABLE_UPDATE
DWORD helpCookie = 0;
bool m_bOptionsLocked = false;
Modified: trunk/OpenMPT/mptrack/UpdateCheck.cpp
==============================================================================
--- trunk/OpenMPT/mptrack/UpdateCheck.cpp Sun Mar 24 19:18:34 2024 (r20469)
+++ trunk/OpenMPT/mptrack/UpdateCheck.cpp Tue Mar 26 14:18:31 2024 (r20470)
@@ -462,6 +462,24 @@
}
+void CUpdateCheck::WaitForUpdateCheckFinished()
+{
+ while(GetNumCurrentRunningInstances() > 0)
+ {
+ MSG msg;
+ while(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+ {
+ ::TranslateMessage(&msg);
+ ::DispatchMessage(&msg);
+ }
+ if(GetNumCurrentRunningInstances() > 0)
+ {
+ Sleep(1);
+ }
+ }
+}
+
+
// Start update check
void CUpdateCheck::StartUpdateCheckAsync(bool isAutoUpdate)
{
Modified: trunk/OpenMPT/mptrack/UpdateCheck.h
==============================================================================
--- trunk/OpenMPT/mptrack/UpdateCheck.h Sun Mar 24 19:18:34 2024 (r20469)
+++ trunk/OpenMPT/mptrack/UpdateCheck.h Tue Mar 26 14:18:31 2024 (r20470)
@@ -62,13 +62,15 @@
static std::vector<mpt::ustring> GetDefaultUpdateSigningKeysRootAnchors();
static mpt::ustring GetDefaultAPIURL();
- int32 GetNumCurrentRunningInstances();
+ static int32 GetNumCurrentRunningInstances();
static bool IsSuitableUpdateMoment();
static void DoAutoUpdateCheck() { StartUpdateCheckAsync(true); }
static void DoManualUpdateCheck() { StartUpdateCheckAsync(false); }
+ static void WaitForUpdateCheckFinished();
+
public:
struct Context
|