From 32d795f2b67393cc76b8cd8c0462196c451fa201 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Mon, 6 Oct 2014 14:24:13 +0200 Subject: [PATCH] C++: Do not share dependency table when copying a Snapshot There are multiple situations were the snapshot is copied and access/modifications to the dependency table data is made in other threads, e.g.: * FindUsages called by ProcessFile * findReferences() in cppuseselectionsupdater.cpp * CppModelManager::projectPartFromDependencies() (clang path) Change-Id: Ided1c5350f339c5bc960b87b32c78ccc21fa61f6 Reviewed-by: hjk --- src/libs/cplusplus/CppDocument.cpp | 9 ++++----- src/libs/cplusplus/CppDocument.h | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/libs/cplusplus/CppDocument.cpp b/src/libs/cplusplus/CppDocument.cpp index 40d91baf4c2..b88b6df424f 100644 --- a/src/libs/cplusplus/CppDocument.cpp +++ b/src/libs/cplusplus/CppDocument.cpp @@ -715,7 +715,6 @@ bool Document::DiagnosticMessage::operator!=(const Document::DiagnosticMessage & } Snapshot::Snapshot() - : m_deps(new DependencyTable) { } @@ -752,7 +751,7 @@ void Snapshot::insert(Document::Ptr doc) { if (doc) { _documents.insert(doc->fileName(), doc); - m_deps->files.clear(); // Will trigger re-build when accessed. + m_deps.files.clear(); // Will trigger re-build when accessed. } } @@ -816,13 +815,13 @@ QList Snapshot::includeLocationsOfDocument(const QStr QStringList Snapshot::filesDependingOn(const QString &fileName) const { updateDependencyTable(); - return m_deps->filesDependingOn(fileName); + return m_deps.filesDependingOn(fileName); } void Snapshot::updateDependencyTable() const { - if (m_deps->files.isEmpty()) - m_deps->build(*this); + if (m_deps.files.isEmpty()) + m_deps.build(*this); } void Snapshot::allIncludesForDocument_helper(const QString &fileName, QSet &result) const diff --git a/src/libs/cplusplus/CppDocument.h b/src/libs/cplusplus/CppDocument.h index 1ba5941f071..1c0fa267f98 100644 --- a/src/libs/cplusplus/CppDocument.h +++ b/src/libs/cplusplus/CppDocument.h @@ -433,7 +433,7 @@ public: private: void allIncludesForDocument_helper(const QString &fileName, QSet &result) const; - mutable QSharedPointer m_deps; + mutable DependencyTable m_deps; Base _documents; };