diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index 657286bec53..f807f12bc3b 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -582,6 +582,7 @@ CppModelManager::~CppModelManager() Snapshot CppModelManager::snapshot() const { + QMutexLocker locker(&protectSnapshot); return m_snapshot; } @@ -795,7 +796,11 @@ void CppModelManager::emitDocumentUpdated(Document::Ptr doc) void CppModelManager::onDocumentUpdated(Document::Ptr doc) { const QString fileName = doc->fileName(); - m_snapshot[fileName] = doc; + + protectSnapshot.lock(); + m_snapshot.insert(doc); + protectSnapshot.unlock(); + QList openedEditors = m_core->editorManager()->openedEditors(); foreach (Core::IEditor *editor, openedEditors) { if (editor->file()->fileName() == fileName) { @@ -1074,7 +1079,9 @@ void CppModelManager::parse(QFutureInterface &future, void CppModelManager::GC() { + protectSnapshot.lock(); Snapshot documents = m_snapshot; + protectSnapshot.unlock(); QSet processed; QStringList todo = projectFiles(); @@ -1105,7 +1112,10 @@ void CppModelManager::GC() } emit aboutToRemoveFiles(removedFiles); + + protectSnapshot.lock(); m_snapshot = documents; + protectSnapshot.unlock(); } diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h index 30569890e2e..d768d8d50b3 100644 --- a/src/plugins/cpptools/cppmodelmanager.h +++ b/src/plugins/cpptools/cppmodelmanager.h @@ -170,6 +170,7 @@ private: QMap m_projects; mutable QMutex mutex; + mutable QMutex protectSnapshot; struct Editor { QPointer textEditor;