Index: mptrack/MainFrm.cpp =================================================================== --- mptrack/MainFrm.cpp (revision 20463) +++ mptrack/MainFrm.cpp (working copy) @@ -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) Index: mptrack/Mainfrm.h =================================================================== --- mptrack/Mainfrm.h (revision 20463) +++ mptrack/Mainfrm.h (working copy) @@ -191,6 +191,7 @@ #if defined(MPT_ENABLE_UPDATE) class CUpdateSetupDlg *m_UpdateOptionsDialog = nullptr; std::unique_ptr m_updateCheckResult; + bool m_cancelUpdateCheck = false; #endif // MPT_ENABLE_UPDATE DWORD helpCookie = 0; bool m_bOptionsLocked = false; Index: mptrack/UpdateCheck.cpp =================================================================== --- mptrack/UpdateCheck.cpp (revision 20463) +++ mptrack/UpdateCheck.cpp (working copy) @@ -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) { Index: mptrack/UpdateCheck.h =================================================================== --- mptrack/UpdateCheck.h (revision 20463) +++ mptrack/UpdateCheck.h (working copy) @@ -62,7 +62,7 @@ static std::vector GetDefaultUpdateSigningKeysRootAnchors(); static mpt::ustring GetDefaultAPIURL(); - int32 GetNumCurrentRunningInstances(); + static int32 GetNumCurrentRunningInstances(); static bool IsSuitableUpdateMoment(); @@ -69,6 +69,8 @@ static void DoAutoUpdateCheck() { StartUpdateCheckAsync(true); } static void DoManualUpdateCheck() { StartUpdateCheckAsync(false); } + static void WaitForUpdateCheckFinished(); + public: struct Context