From ad49e64ff00259fc1967768695dd5e5a0ee65c96 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Wed, 27 Jul 2016 14:48:42 +0200 Subject: CppTools: Cancel parsing if editor is closed The m_parserFuture.cancel() in ~BuiltinEditorDocumentProcessor() did not cancel anything. Thus, closing a document while the parser was running led to a blocking UI thread. Now it cancels at the next include directive it encounters. Change-Id: I092fddbbd747e0bc95265b6e9b4fcc26b3f76cb3 Reviewed-by: Friedemann Kleint Reviewed-by: Tim Jenssen --- src/plugins/cpptools/builtineditordocumentparser.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/plugins/cpptools/builtineditordocumentparser.cpp') diff --git a/src/plugins/cpptools/builtineditordocumentparser.cpp b/src/plugins/cpptools/builtineditordocumentparser.cpp index 014252b13d..8ab6a89101 100644 --- a/src/plugins/cpptools/builtineditordocumentparser.cpp +++ b/src/plugins/cpptools/builtineditordocumentparser.cpp @@ -55,7 +55,8 @@ BuiltinEditorDocumentParser::BuiltinEditorDocumentParser(const QString &filePath qRegisterMetaType("CPlusPlus::Snapshot"); } -void BuiltinEditorDocumentParser::updateHelper(const WorkingCopy &theWorkingCopy) +void BuiltinEditorDocumentParser::updateHelper(const QFutureInterface &future, + const WorkingCopy &theWorkingCopy) { if (filePath().isEmpty()) return; @@ -181,6 +182,10 @@ void BuiltinEditorDocumentParser::updateHelper(const WorkingCopy &theWorkingCopy if (releaseSourceAndAST_) doc->releaseSourceAndAST(); }); + sourceProcessor.setCancelChecker([future]() { + return future.isCanceled(); + }); + Snapshot globalSnapshot = modelManager->snapshot(); globalSnapshot.remove(filePath()); sourceProcessor.setGlobalSnapshot(globalSnapshot); -- cgit v1.2.1