diff options
author | Joerg Bornemann <joerg.bornemann@digia.com> | 2014-10-10 11:33:50 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@digia.com> | 2014-10-10 13:51:04 +0200 |
commit | c284f7e0e1f15af55224a660e16f5f066df150c8 (patch) | |
tree | ccc4f136925d847881389244f151d466488359e8 /src/lib/corelib/language | |
parent | fe967048f32fdfc4c378c6589181555fb47ca415 (diff) |
make product's file path cache thread-safe
This cache is accessed from multiple threads.
Change-Id: I85f8d2a08215bd5d7478ae862ff611deaa07d400
Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
Diffstat (limited to 'src/lib/corelib/language')
-rw-r--r-- | src/lib/corelib/language/language.cpp | 12 | ||||
-rw-r--r-- | src/lib/corelib/language/language.h | 8 |
2 files changed, 19 insertions, 1 deletions
diff --git a/src/lib/corelib/language/language.cpp b/src/lib/corelib/language/language.cpp index af68f7cfa..a5a8a2636 100644 --- a/src/lib/corelib/language/language.cpp +++ b/src/lib/corelib/language/language.cpp @@ -759,6 +759,18 @@ QString ResolvedProduct::buildDirectory() const return result; } +void ResolvedProduct::cacheExecutablePath(const QString &origFilePath, const QString &fullFilePath) +{ + QMutexLocker locker(&m_executablePathCacheLock); + m_executablePathCache.insert(origFilePath, fullFilePath); +} + +QString ResolvedProduct::cachedExecutablePath(const QString &origFilePath) const +{ + QMutexLocker locker(&m_executablePathCacheLock); + return m_executablePathCache.value(origFilePath); +} + ResolvedProject::ResolvedProject() : enabled(true), m_topLevelProject(0) { diff --git a/src/lib/corelib/language/language.h b/src/lib/corelib/language/language.h index 695fc69cb..829b8f294 100644 --- a/src/lib/corelib/language/language.h +++ b/src/lib/corelib/language/language.h @@ -45,6 +45,7 @@ #include <QByteArray> #include <QDataStream> #include <QHash> +#include <QMutex> #include <QProcessEnvironment> #include <QRegExp> #include <QScriptProgram> @@ -375,7 +376,6 @@ public: mutable QProcessEnvironment buildEnvironment; // must not be saved mutable QProcessEnvironment runEnvironment; // must not be saved - QHash<QString, QString> executablePathCache; void accept(BuildGraphVisitor *visitor) const; QList<SourceArtifactPtr> allFiles() const; @@ -399,11 +399,17 @@ public: QStringList generatedFiles(const QString &baseFile, const FileTags &tags) const; QString buildDirectory() const; + void cacheExecutablePath(const QString &origFilePath, const QString &fullFilePath); + QString cachedExecutablePath(const QString &origFilePath) const; + private: ResolvedProduct(); void load(PersistentPool &pool); void store(PersistentPool &pool) const; + + QHash<QString, QString> m_executablePathCache; + mutable QMutex m_executablePathCacheLock; }; class ResolvedProject : public PersistentObject |