diff --git a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp index aac0de9ab1e..a525c6c3054 100644 --- a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp +++ b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp @@ -317,6 +317,16 @@ void ModelManagerInterface::setDefaultProject(const ModelManagerInterface::Proje }); } +void ModelManagerInterface::cancelAllThreads() +{ + m_cppQmlTypesUpdater.cancel(); + // Don't execute the scheduled updates for the old session anymore + m_updateCppQmlTypesTimer->stop(); + m_asyncResetTimer->stop(); + QMutexLocker locker(&m_futuresMutex); + m_futureSynchronizer.cancelAllFutures(); +} + Snapshot ModelManagerInterface::snapshot() const { return m_syncedData.readLocked()->m_validSnapshot; diff --git a/src/libs/qmljs/qmljsmodelmanagerinterface.h b/src/libs/qmljs/qmljsmodelmanagerinterface.h index c57cba7e46e..ae3d8e0e6c4 100644 --- a/src/libs/qmljs/qmljsmodelmanagerinterface.h +++ b/src/libs/qmljs/qmljsmodelmanagerinterface.h @@ -238,7 +238,7 @@ protected: void updateImportPaths(); void loadQmlTypeDescriptionsInternal(const QString &path); void setDefaultProject(const ProjectInfo &pInfo, ProjectExplorer::Project *p); - + void cancelAllThreads(); private: void joinAllThreads(bool cancelOnWait = false); void iterateQrcFiles(ProjectExplorer::Project *project, diff --git a/src/plugins/qmljstools/qmljsmodelmanager.cpp b/src/plugins/qmljstools/qmljsmodelmanager.cpp index c8265d73544..36d0e657cf5 100644 --- a/src/plugins/qmljstools/qmljsmodelmanager.cpp +++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include @@ -281,6 +282,8 @@ void ModelManager::delayedInitialization() this, &ModelManager::removeProjectInfo); connect(ProjectManager::instance(), &ProjectManager::startupProjectChanged, this, &ModelManager::updateDefaultProjectInfo); + connect(SessionManager::instance(), &SessionManager::aboutToLoadSession, + this, &ModelManager::cancelAllThreads); ViewerContext qbsVContext; qbsVContext.language = Dialect::QmlQbs;