diff --git a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp index e89b8ae23c8..dc9435787f5 100644 --- a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp +++ b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp @@ -140,6 +140,7 @@ ModelManagerInterface::ModelManagerInterface(QObject *parent) ModelManagerInterface::~ModelManagerInterface() { + joinAllThreads(true); m_cppQmlTypesUpdater.cancel(); m_cppQmlTypesUpdater.waitForFinished(); Q_ASSERT(g_instance == this); @@ -1558,7 +1559,7 @@ void ModelManagerInterface::setDefaultVContext(const ViewerContext &vContext) m_defaultVContexts[vContext.language] = vContext; } -void ModelManagerInterface::joinAllThreads() +void ModelManagerInterface::joinAllThreads(bool cancelOnWait) { while (true) { FutureSynchronizer futureSynchronizer; @@ -1567,6 +1568,7 @@ void ModelManagerInterface::joinAllThreads() futureSynchronizer = m_futureSynchronizer; m_futureSynchronizer.clearFutures(); } + futureSynchronizer.setCancelOnWait(cancelOnWait); if (futureSynchronizer.isEmpty()) return; } diff --git a/src/libs/qmljs/qmljsmodelmanagerinterface.h b/src/libs/qmljs/qmljsmodelmanagerinterface.h index e31c69b84e4..d4eb84e9585 100644 --- a/src/libs/qmljs/qmljsmodelmanagerinterface.h +++ b/src/libs/qmljs/qmljsmodelmanagerinterface.h @@ -244,7 +244,7 @@ protected: void setDefaultProject(const ProjectInfo &pInfo, ProjectExplorer::Project *p); private: - void joinAllThreads(); + void joinAllThreads(bool cancelOnWait = false); void iterateQrcFiles(ProjectExplorer::Project *project, QrcResourceSelector resources, const std::function &callback);