summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppmodelmanager.cpp
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2015-11-06 16:50:02 +0100
committerErik Verbruggen <erik.verbruggen@theqtcompany.com>2015-11-09 12:10:14 +0000
commit9d7b0541206085d37b2aacef57a1a8fc37db4b7b (patch)
tree726c60f92555e571f5882f8ff580ac96f400f85c /src/plugins/cpptools/cppmodelmanager.cpp
parent4bf0ca6bebe880fdb4f0b6bdd8fae1c7cb5db51a (diff)
downloadqt-creator-9d7b0541206085d37b2aacef57a1a8fc37db4b7b.tar.gz
CppTools: Fix potential race condition
...when acessing m_headerPaths, m_projectFiles or m_definedMacros from different threads. ensureUpdated() locked the mutex before writing the variables, but reading them happened with an unlocked mutex. Change-Id: I4951fd58f1939e4e50534a018dd600004789668e Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
Diffstat (limited to 'src/plugins/cpptools/cppmodelmanager.cpp')
-rw-r--r--src/plugins/cpptools/cppmodelmanager.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp
index 61e87cf7a9..f82f414aee 100644
--- a/src/plugins/cpptools/cppmodelmanager.cpp
+++ b/src/plugins/cpptools/cppmodelmanager.cpp
@@ -384,9 +384,9 @@ bool CppModelManager::replaceDocument(Document::Ptr newDoc)
return true;
}
+/// Make sure that m_projectMutex is locked when calling this.
void CppModelManager::ensureUpdated()
{
- QMutexLocker locker(&d->m_projectMutex);
if (!d->m_dirty)
return;
@@ -475,8 +475,7 @@ void CppModelManager::dumpModelManagerConfiguration(const QString &logFileId)
dumper.dumpProjectInfos(projectInfos());
dumper.dumpSnapshot(globalSnapshot, globalSnapshotTitle, /*isGlobalSnapshot=*/ true);
dumper.dumpWorkingCopy(workingCopy());
- ensureUpdated();
- dumper.dumpMergedEntities(d->m_headerPaths, d->m_definedMacros);
+ dumper.dumpMergedEntities(headerPaths(), definedMacros());
}
QSet<AbstractEditorSupport *> CppModelManager::abstractEditorSupports() const
@@ -941,12 +940,12 @@ QList<ProjectPart::Ptr> CppModelManager::projectPartFromDependencies(
return parts.values();
}
-ProjectPart::Ptr CppModelManager::fallbackProjectPart() const
+ProjectPart::Ptr CppModelManager::fallbackProjectPart()
{
ProjectPart::Ptr part(new ProjectPart);
- part->projectDefines = d->m_definedMacros;
- part->headerPaths = d->m_headerPaths;
+ part->projectDefines = definedMacros();
+ part->headerPaths = headerPaths();
part->languageVersion = ProjectPart::CXX14;
// Do not activate ObjectiveCExtensions since this will lead to the
@@ -1259,24 +1258,31 @@ CppIndexingSupport *CppModelManager::indexingSupport()
QStringList CppModelManager::projectFiles()
{
+ QMutexLocker locker(&d->m_projectMutex);
ensureUpdated();
+
return d->m_projectFiles;
}
ProjectPart::HeaderPaths CppModelManager::headerPaths()
{
+ QMutexLocker locker(&d->m_projectMutex);
ensureUpdated();
+
return d->m_headerPaths;
}
void CppModelManager::setHeaderPaths(const ProjectPart::HeaderPaths &headerPaths)
{
+ QMutexLocker locker(&d->m_projectMutex);
d->m_headerPaths = headerPaths;
}
QByteArray CppModelManager::definedMacros()
{
+ QMutexLocker locker(&d->m_projectMutex);
ensureUpdated();
+
return d->m_definedMacros;
}