From 7fb592fe0cfec22ae7e966b9c6b88aa801bf9592 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 5 May 2021 10:40:43 +0200 Subject: [PATCH] CppTools: Fix UI freeze on project update Do not wait for the previous update to finish before starting the next update. Amends: 6d7e5eb8d17194b124c8986d670ff96fda96f0f3 Change-Id: Ic8d43b56949cbf024832afc85e54a31db29b11ac Reviewed-by: Christian Kandeler --- src/plugins/cpptools/cppmodelmanager.cpp | 2 ++ src/plugins/cpptools/cppprojectupdater.cpp | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index 5f6f296503f..a4652e8bafd 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -1089,10 +1089,12 @@ void CppModelManager::watchForCanceledProjectIndexer(const QFuture &future connect(watcher, &QFutureWatcher::canceled, this, [this, project, watcher]() { if (d->m_projectToIndexerCanceled.contains(project)) // Project not yet removed d->m_projectToIndexerCanceled.insert(project, true); + watcher->disconnect(this); watcher->deleteLater(); }); connect(watcher, &QFutureWatcher::finished, this, [this, project, watcher]() { d->m_projectToIndexerCanceled.remove(project); + watcher->disconnect(this); watcher->deleteLater(); }); watcher->setFuture(future); diff --git a/src/plugins/cpptools/cppprojectupdater.cpp b/src/plugins/cpptools/cppprojectupdater.cpp index f0b0bda0902..567aabde5ee 100644 --- a/src/plugins/cpptools/cppprojectupdater.cpp +++ b/src/plugins/cpptools/cppprojectupdater.cpp @@ -53,7 +53,7 @@ CppProjectUpdater::~CppProjectUpdater() void CppProjectUpdater::update(const ProjectExplorer::ProjectUpdateInfo &projectUpdateInfo) { // Stop previous update. - cancelAndWaitForFinished(); + cancel(); m_projectUpdateInfo = projectUpdateInfo; @@ -93,7 +93,7 @@ void CppProjectUpdater::onToolChainRemoved(ProjectExplorer::ToolChain *t) { QTC_ASSERT(t, return); if (t == m_projectUpdateInfo.cToolChain || t == m_projectUpdateInfo.cxxToolChain) - cancelAndWaitForFinished(); + cancel(); } void CppProjectUpdater::onProjectInfoGenerated()