From: <sv...@op...> - 2024-03-26 13:20:05
|
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 |