From e8ba82f1f4a8cd337c37ff60d8ef479af9f43fdc Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Tue, 2 Jun 2009 15:27:13 +0200 Subject: [PATCH] Protected modelmanager's snapshot. --- src/plugins/cpptools/cppmodelmanager.cpp | 12 +++++++++++- src/plugins/cpptools/cppmodelmanager.h | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) 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<Core::IEditor *> openedEditors = m_core->editorManager()->openedEditors(); foreach (Core::IEditor *editor, openedEditors) { if (editor->file()->fileName() == fileName) { @@ -1074,7 +1079,9 @@ void CppModelManager::parse(QFutureInterface<void> &future, void CppModelManager::GC() { + protectSnapshot.lock(); Snapshot documents = m_snapshot; + protectSnapshot.unlock(); QSet<QString> 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<ProjectExplorer::Project *, ProjectInfo> m_projects; mutable QMutex mutex; + mutable QMutex protectSnapshot; struct Editor { QPointer<TextEditor::ITextEditor> textEditor; -- GitLab