diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp index 39295703122..bf199406cea 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp @@ -2026,6 +2026,11 @@ void QmakeProFileNode::applyEvaluate(EvalResult *evalResult) if (!m_readerExact) return; + if (m_project->asyncUpdateState() == QmakeProject::ShuttingDown) { + cleanupProFileReaders(); + return; + } + foreach (const QString &error, evalResult->errors) QmakeProject::proFileParseError(error); @@ -2258,6 +2263,11 @@ void QmakeProFileNode::applyEvaluate(EvalResult *evalResult) updateUiFiles(buildDirectory); + cleanupProFileReaders(); +} + +void QmakeProFileNode::cleanupProFileReaders() +{ m_project->destroyProFileReader(m_readerExact); m_project->destroyProFileReader(m_readerCumulative); diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.h b/src/plugins/qmakeprojectmanager/qmakenodes.h index 2acbce65320..7cf4ba8cb5d 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.h +++ b/src/plugins/qmakeprojectmanager/qmakenodes.h @@ -447,6 +447,7 @@ private: void applyEvaluate(Internal::EvalResult *parseResult); void asyncEvaluate(QFutureInterface &fi, Internal::EvalInput input); + void cleanupProFileReaders(); typedef QHash QmakeVariablesHash; diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index 6988c902bbd..1ca09a2293e 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -1675,6 +1675,11 @@ ProjectImporter *QmakeProject::createProjectImporter() const return new QmakeProjectImporter(projectFilePath().toString()); } +QmakeProject::AsyncUpdateState QmakeProject::asyncUpdateState() const +{ + return m_asyncUpdateState; +} + } // namespace QmakeProjectManager #include "qmakeproject.moc" diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.h b/src/plugins/qmakeprojectmanager/qmakeproject.h index 103dd6983ac..7959c5242b8 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.h +++ b/src/plugins/qmakeprojectmanager/qmakeproject.h @@ -141,6 +141,9 @@ public: ProjectExplorer::ProjectImporter *createProjectImporter() const; + enum AsyncUpdateState { Base, AsyncFullUpdatePending, AsyncPartialUpdatePending, AsyncUpdateInProgress, ShuttingDown }; + AsyncUpdateState asyncUpdateState() const; + signals: void proFileUpdated(QmakeProjectManager::QmakeProFileNode *node, bool, bool); void buildDirectoryInitialized(); @@ -203,7 +206,6 @@ private: QTimer m_asyncUpdateTimer; QFutureInterface *m_asyncUpdateFutureInterface; int m_pendingEvaluateFuturesCount; - enum AsyncUpdateState { Base, AsyncFullUpdatePending, AsyncPartialUpdatePending, AsyncUpdateInProgress, ShuttingDown }; AsyncUpdateState m_asyncUpdateState; bool m_cancelEvaluate; QList m_partialEvaluate;