diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp index b282e754eb5..58eae03422d 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp @@ -91,15 +91,14 @@ ClangEditorDocumentProcessor::ClangEditorDocumentProcessor( this, &ClangEditorDocumentProcessor::cppDocumentUpdated); connect(&m_builtinProcessor, &CppTools::BuiltinEditorDocumentProcessor::semanticInfoUpdated, this, &ClangEditorDocumentProcessor::semanticInfoUpdated); + + m_parserSynchronizer.setCancelOnWait(true); } ClangEditorDocumentProcessor::~ClangEditorDocumentProcessor() { m_updateBackendDocumentTimer.stop(); - m_parserWatcher.cancel(); - m_parserWatcher.waitForFinished(); - if (m_projectPart) closeBackendDocument(); } @@ -120,6 +119,7 @@ void ClangEditorDocumentProcessor::runImpl( this, &ClangEditorDocumentProcessor::onParserFinished); const QFuture future = ::Utils::runAsync(&runParser, parser(), updateParams); m_parserWatcher.setFuture(future); + m_parserSynchronizer.addFuture(future); // Run builtin processor m_builtinProcessor.runImpl(updateParams); diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.h b/src/plugins/clangcodemodel/clangeditordocumentprocessor.h index 91d98601aab..0d3e23c02b2 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.h +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.h @@ -33,6 +33,7 @@ #include +#include #include #include @@ -145,6 +146,7 @@ private: QVector m_tokenInfos; CppTools::SemanticHighlighter m_semanticHighlighter; CppTools::BuiltinEditorDocumentProcessor m_builtinProcessor; + QFutureSynchronizer m_parserSynchronizer; }; } // namespace Internal