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:
		@@ -53,7 +53,7 @@ public:
 | 
			
		||||
    void recalculateSemanticInfoDetached(bool force) override;
 | 
			
		||||
    void semanticRehighlight() override;
 | 
			
		||||
    CppTools::SemanticInfo recalculateSemanticInfo() override;
 | 
			
		||||
    BaseEditorDocumentParser *parser() override;
 | 
			
		||||
    BaseEditorDocumentParser::Ptr parser() override;
 | 
			
		||||
    CPlusPlus::Snapshot snapshot() override;
 | 
			
		||||
    bool isParserRunning() const override;
 | 
			
		||||
 | 
			
		||||
@@ -66,7 +66,7 @@ private:
 | 
			
		||||
    SemanticInfo::Source createSemanticInfoSource(bool force) const;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    BuiltinEditorDocumentParser m_parser;
 | 
			
		||||
    BuiltinEditorDocumentParser::Ptr m_parser;
 | 
			
		||||
    QFuture<void> m_parserFuture;
 | 
			
		||||
 | 
			
		||||
    CPlusPlus::Snapshot m_documentSnapshot;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user