diff --git a/src/plugins/classview/classviewmanager.cpp b/src/plugins/classview/classviewmanager.cpp index 8284071d217..338c1eb3578 100644 --- a/src/plugins/classview/classviewmanager.cpp +++ b/src/plugins/classview/classviewmanager.cpp @@ -123,6 +123,7 @@ Manager::Manager(QObject *parent) Manager::~Manager() { + QMetaObject::invokeMethod(&d->parser, &Parser::aboutToShutdown, Qt::BlockingQueuedConnection); d->parserThread.quit(); d->parserThread.wait(); delete d; diff --git a/src/plugins/classview/classviewparser.cpp b/src/plugins/classview/classviewparser.cpp index 63f3048862f..49af9de8767 100644 --- a/src/plugins/classview/classviewparser.cpp +++ b/src/plugins/classview/classviewparser.cpp @@ -89,6 +89,7 @@ public: CPlusPlus::Document::Ptr document(const QString &fileName) const; QTimer timer; + bool m_shuttingDown = false; struct DocumentCache { unsigned treeRevision = 0; @@ -199,6 +200,12 @@ void Parser::setFlatMode(bool flatMode) requestCurrentState(); } +void Parser::aboutToShutdown() +{ + d->m_shuttingDown = true; + d->timer.stop(); +} + /*! Returns the internal tree item for \a item. \a skipRoot skips the root item. @@ -405,9 +412,8 @@ void Parser::parseDocument(const CPlusPlus::Document::Ptr &doc) getParseDocumentTree(doc); - if (!d->timer.isActive()) + if (!d->timer.isActive() && !d->m_shuttingDown) d->timer.start(400); //! Delay in msecs before an update - return; } /*! diff --git a/src/plugins/classview/classviewparser.h b/src/plugins/classview/classviewparser.h index 65299e87b13..4d6f75f8fa1 100644 --- a/src/plugins/classview/classviewparser.h +++ b/src/plugins/classview/classviewparser.h @@ -62,6 +62,7 @@ public: void resetDataToCurrentState(); void parseDocument(const CPlusPlus::Document::Ptr &doc); void setFlatMode(bool flat); + void aboutToShutdown(); signals: void treeDataUpdate(QSharedPointer result);