diff options
author | Jarek Kobus <jaroslaw.kobus@qt.io> | 2021-02-16 17:44:28 +0100 |
---|---|---|
committer | Jarek Kobus <jaroslaw.kobus@qt.io> | 2021-02-16 19:53:14 +0000 |
commit | 72f727b6aca14e16961f6bcb20b3fc06c2cbfafc (patch) | |
tree | 518e98b454410090c7ae746e365d3dc8e1438526 /src/plugins/classview/classviewparser.cpp | |
parent | 8c5dc305aeb73c5d3a1818c16907611c00531b79 (diff) | |
download | qt-creator-72f727b6aca14e16961f6bcb20b3fc06c2cbfafc.tar.gz |
ClassView: Delete Parser object from inside parser's thread
The Parser object is being moved to parser's thread inside
Manager constructor. However, when destructor of Manager
is being called, we delete the Parser from inside the main
thread. According to QThread documentation we should delete
object (which have been moved to another thread) from inside
the object's current thread. So in case of Parser, we should
delete it from the parser's thread. In order to fix it,
we create Parser object dynamically and connect finished
signal of the parser's thread to the parser's deleteLater().
Since now the parser is being deleted in parser's thread
we don't need a special handling for stopping the timer
object inside the parser's thread, as its destructor
will also be called from inside parser's thread.
Task-number: QTCREATORBUG-25317
Change-Id: I28dee2c3db5cf8329a9578e7a85952e8a85850d3
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins/classview/classviewparser.cpp')
-rw-r--r-- | src/plugins/classview/classviewparser.cpp | 9 |
1 files changed, 1 insertions, 8 deletions
diff --git a/src/plugins/classview/classviewparser.cpp b/src/plugins/classview/classviewparser.cpp index 01bdb278bb..d4b8716751 100644 --- a/src/plugins/classview/classviewparser.cpp +++ b/src/plugins/classview/classviewparser.cpp @@ -88,7 +88,6 @@ public: CPlusPlus::Document::Ptr document(const QString &fileName) const; QTimer timer; - bool m_shuttingDown = false; struct DocumentCache { unsigned treeRevision = 0; @@ -160,12 +159,6 @@ void Parser::setFlatMode(bool flatMode) requestCurrentState(); } -void Parser::aboutToShutdown() -{ - d->m_shuttingDown = true; - d->timer.stop(); -} - /*! Parses the class and produces a new tree. @@ -331,7 +324,7 @@ void Parser::parseDocument(const CPlusPlus::Document::Ptr &doc) getParseDocumentTree(doc); - if (!d->timer.isActive() && !d->m_shuttingDown) + if (!d->timer.isActive()) d->timer.start(400); //! Delay in msecs before an update } |