Author: manx
Date: Tue Mar 26 14:19:54 2024
New Revision: 20471
URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=20471
Log:
Merged revision(s) 20470 from trunk/OpenMPT:
[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:
branches/OpenMPT-1.31/ (props changed)
branches/OpenMPT-1.31/mptrack/MainFrm.cpp
branches/OpenMPT-1.31/mptrack/Mainfrm.h
branches/OpenMPT-1.31/mptrack/UpdateCheck.cpp
branches/OpenMPT-1.31/mptrack/UpdateCheck.h
Modified: branches/OpenMPT-1.31/mptrack/MainFrm.cpp
==============================================================================
--- branches/OpenMPT-1.31/mptrack/MainFrm.cpp Tue Mar 26 14:18:31 2024 (r20470)
+++ branches/OpenMPT-1.31/mptrack/MainFrm.cpp Tue Mar 26 14:19:54 2024 (r20471)
@@ -370,6 +370,10 @@
}
}
+#if defined(MPT_ENABLE_UPDATE)
+ m_cancelUpdateCheck = true;
+#endif // MPT_ENABLE_UPDATE
+
CChildFrame *pMDIActive = (CChildFrame *)MDIGetActive();
BeginWaitCursor();
@@ -395,6 +399,10 @@
m_InputHandler->m_activeCommandSet->SaveFile(TrackerSettings::Instance().m_szKbdFile);
}
+#if defined(MPT_ENABLE_UPDATE)
+ CUpdateCheck::WaitForUpdateCheckFinished();
+#endif // MPT_ENABLE_UPDATE
+
EndWaitCursor();
CMDIFrameWnd::OnClose();
}
@@ -2699,6 +2707,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: branches/OpenMPT-1.31/mptrack/Mainfrm.h
==============================================================================
--- branches/OpenMPT-1.31/mptrack/Mainfrm.h Tue Mar 26 14:18:31 2024 (r20470)
+++ branches/OpenMPT-1.31/mptrack/Mainfrm.h Tue Mar 26 14:19:54 2024 (r20471)
@@ -312,6 +312,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: branches/OpenMPT-1.31/mptrack/UpdateCheck.cpp
==============================================================================
--- branches/OpenMPT-1.31/mptrack/UpdateCheck.cpp Tue Mar 26 14:18:31 2024 (r20470)
+++ branches/OpenMPT-1.31/mptrack/UpdateCheck.cpp Tue Mar 26 14:19:54 2024 (r20471)
@@ -461,6 +461,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: branches/OpenMPT-1.31/mptrack/UpdateCheck.h
==============================================================================
--- branches/OpenMPT-1.31/mptrack/UpdateCheck.h Tue Mar 26 14:18:31 2024 (r20470)
+++ branches/OpenMPT-1.31/mptrack/UpdateCheck.h Tue Mar 26 14:19:54 2024 (r20471)
@@ -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
|