From 26c0d6ab92e5cd44e74d0b6cdc38239ee890cc0b Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Thu, 24 Sep 2015 12:17:43 +0200 Subject: [PATCH] Clang: Fix race condition when closing a project ...which could lead to undesired asserts: SOFT ASSERT: "!"Got ProjectPartsDoNotExistMessage"" in file clangbackendipcintegration.cpp, line 184 Change-Id: If6d67b9f617394ce8f72e7e56699423d47879688 Reviewed-by: Marco Bubke --- .../clangeditordocumentprocessor.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp index c5fd46c567c..028613ebad6 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp @@ -217,15 +217,22 @@ ClangEditorDocumentProcessor *ClangEditorDocumentProcessor::get(const QString &f return qobject_cast(BaseEditorDocumentProcessor::get(filePath)); } +static bool isProjectPartLoadedOrIsFallback(CppTools::ProjectPart::Ptr projectPart) +{ + return projectPart + && (projectPart->id().isEmpty() || ClangCodeModel::Utils::isProjectPartValid(projectPart)); +} + void ClangEditorDocumentProcessor::updateProjectPartAndTranslationUnitForEditor() { const CppTools::ProjectPart::Ptr projectPart = m_parser->projectPart(); - QTC_ASSERT(projectPart, return); - updateTranslationUnitForEditor(*projectPart.data()); - requestDiagnostics(*projectPart.data()); + if (isProjectPartLoadedOrIsFallback(projectPart)) { + updateTranslationUnitForEditor(*projectPart.data()); + requestDiagnostics(*projectPart.data()); - m_projectPart = projectPart; + m_projectPart = projectPart; + } } void ClangEditorDocumentProcessor::onParserFinished()