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