• Nikolai Kosjar's avatar
    CppTools: Fix dead lock on project unloading · 77270648
    Nikolai Kosjar authored
    ...with the clang code model.
    
    In updateProjectInfo() we lock the project mutex and emit a signal.
    However, the correspondig slot in the clang code model will call back
    into a function that needs to lock the mutex, too:
    
        CppTools::CppModelManager::workingCopy // dead locks here
        CppTools::BaseEditorDocumentParser::InMemoryInfo::InMemoryInfo
        ClangCodeModel::Internal::ClangEditorDocumentProcessor::run
        ClangCodeModel::Internal::ModelManagerSupportClang::unregisterTranslationUnitsWithProjectParts
        ClangCodeModel::Internal::ModelManagerSupportClang::onProjectPartsRemoved
         ...
        CppTools::CppModelManager::projectPartsRemoved
        CppTools::CppModelManager::updateProjectInfo // emits here
    
    Fixed by emitting the signal after releasing the mutex.
    
    Change-Id: Id3f3cd22b0604f343ada56ea13c26f0dc1a75bd6
    Reviewed-by: default avatarMarco Bubke <marco.bubke@theqtcompany.com>
    77270648
cppmodelmanager.cpp 41.9 KB