forked from qt-creator/qt-creator
C++: Fix crash after triggering completion and closing editor
Fix use-after-free for the following case:
1. Open an editor
2. Trigger a long processing completion
(e.g. simulate with QThread::msleep in
CppCompletionAssistInterface::getCppSpecifics)
3. ...and immediately close the editor (e.g. with Ctrl+W)
4. Wait until it crashes.
The completion thread relied on the BuiltinEditorDocumentParser object,
which is deleted once the editor is closed. Fixed by sharing the
ownership of that object between the *EditorDocumentProcessor and the
completion assist interface.
This case came up when doing tests for the bug report below.
Task-number: QTCREATORBUG-14991
Change-Id: I0b009229e68fc6b7838740858cdc41a32403fe6f
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
This commit is contained in:
@@ -59,7 +59,7 @@ public:
|
||||
void semanticRehighlight() override;
|
||||
void recalculateSemanticInfoDetached(bool force) override;
|
||||
CppTools::SemanticInfo recalculateSemanticInfo() override;
|
||||
CppTools::BaseEditorDocumentParser *parser() override;
|
||||
CppTools::BaseEditorDocumentParser::Ptr parser() override;
|
||||
CPlusPlus::Snapshot snapshot() override;
|
||||
bool isParserRunning() const override;
|
||||
|
||||
@@ -78,7 +78,7 @@ private:
|
||||
|
||||
QPointer<ModelManagerSupportClang> m_modelManagerSupport;
|
||||
|
||||
ClangEditorDocumentParser m_parser;
|
||||
QSharedPointer<ClangEditorDocumentParser> m_parser;
|
||||
CppTools::ProjectPart::Ptr m_projectPart;
|
||||
QFutureWatcher<void> m_parserWatcher;
|
||||
unsigned m_parserRevision;
|
||||
|
||||
Reference in New Issue
Block a user