ClangModelManagerSupport: Add future synchronizer for started tasks

Task-number: QTCREATORBUG-25678
Change-Id: I0031f64b3d80cfcff6b9625bd2d57ea228382c80
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
Jarek Kobus
2021-05-05 17:59:33 +02:00
parent 80f61a5db9
commit dc88306983
2 changed files with 8 additions and 2 deletions

View File

@@ -127,11 +127,13 @@ ClangModelManagerSupport::ClangModelManagerSupport()
// TODO: Enable this once we do document-level stuff with clangd (highlighting etc) // TODO: Enable this once we do document-level stuff with clangd (highlighting etc)
// createClient(nullptr, {}); // createClient(nullptr, {});
m_generatorSynchronizer.setCancelOnWait(true);
} }
ClangModelManagerSupport::~ClangModelManagerSupport() ClangModelManagerSupport::~ClangModelManagerSupport()
{ {
QTC_CHECK(m_projectSettings.isEmpty()); QTC_CHECK(m_projectSettings.isEmpty());
m_generatorSynchronizer.waitForFinished();
m_instance = nullptr; m_instance = nullptr;
} }
@@ -322,8 +324,10 @@ void ClangModelManagerSupport::updateLanguageClient(ProjectExplorer::Project *pr
}); });
}); });
generatorWatcher->setFuture(Utils::runAsync(&Internal::generateCompilationDB, projectInfo, auto future = Utils::runAsync(&Internal::generateCompilationDB, projectInfo,
CompilationDbPurpose::CodeModel)); CompilationDbPurpose::CodeModel);
generatorWatcher->setFuture(future);
m_generatorSynchronizer.addFuture(future);
} }
ClangdClient *ClangModelManagerSupport::clientForProject( ClangdClient *ClangModelManagerSupport::clientForProject(

View File

@@ -32,6 +32,7 @@
#include <utils/id.h> #include <utils/id.h>
#include <QFutureSynchronizer>
#include <QObject> #include <QObject>
#include <memory> #include <memory>
@@ -134,6 +135,7 @@ private:
std::unique_ptr<CppTools::RefactoringEngineInterface> m_refactoringEngine; std::unique_ptr<CppTools::RefactoringEngineInterface> m_refactoringEngine;
QHash<ProjectExplorer::Project *, ClangProjectSettings *> m_projectSettings; QHash<ProjectExplorer::Project *, ClangProjectSettings *> m_projectSettings;
QFutureSynchronizer<void> m_generatorSynchronizer;
}; };
class ClangModelManagerSupportProvider : public CppTools::ModelManagerSupportProvider class ClangModelManagerSupportProvider : public CppTools::ModelManagerSupportProvider