aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/language
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2014-10-10 11:33:50 +0200
committerChristian Kandeler <christian.kandeler@digia.com>2014-10-10 13:51:04 +0200
commitc284f7e0e1f15af55224a660e16f5f066df150c8 (patch)
treeccc4f136925d847881389244f151d466488359e8 /src/lib/corelib/language
parentfe967048f32fdfc4c378c6589181555fb47ca415 (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.cpp12
-rw-r--r--src/lib/corelib/language/language.h8
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