From b5df17cee3867dda95a4b9a70d7e58b7d55de764 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 17 Jan 2023 15:38:11 +0100 Subject: [PATCH] Utils: Use ReadWriteLock Changes usage of QMutex to QReadWriteLock since the cache is read more often than written. Change-Id: Ifb29de6c14fecea373bfcb7c92eb6e3450a61811 Reviewed-by: hjk --- src/libs/utils/qrcparser.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/libs/utils/qrcparser.cpp b/src/libs/utils/qrcparser.cpp index abee48c2e76..158c061f71f 100644 --- a/src/libs/utils/qrcparser.cpp +++ b/src/libs/utils/qrcparser.cpp @@ -14,8 +14,9 @@ #include #include #include -#include -#include +#include +#include +#include static Q_LOGGING_CATEGORY(qrcParserLog, "qtc.qrcParser", QtWarningMsg) @@ -64,7 +65,7 @@ public: void clear(); private: QHash > m_cache; - QMutex m_mutex; + QReadWriteLock m_mutex; }; } // namespace Internal @@ -598,7 +599,7 @@ QrcParser::Ptr QrcCachePrivate::addPath(const QString &path, const QString &cont { QPair currentValue; { - QMutexLocker l(&m_mutex); + QWriteLocker l(&m_mutex); currentValue = m_cache.value(path, {QrcParser::Ptr(nullptr), 0}); currentValue.second += 1; if (currentValue.second > 1) { @@ -610,7 +611,7 @@ QrcParser::Ptr QrcCachePrivate::addPath(const QString &path, const QString &cont if (!newParser->isValid()) qCWarning(qrcParserLog) << "adding invalid qrc " << path << " to the cache:" << newParser->errorMessages(); { - QMutexLocker l(&m_mutex); + QWriteLocker l(&m_mutex); QPair currentValue = m_cache.value(path, {QrcParser::Ptr(nullptr), 0}); if (currentValue.first.isNull()) currentValue.first = newParser; @@ -624,7 +625,7 @@ void QrcCachePrivate::removePath(const QString &path) { QPair currentValue; { - QMutexLocker l(&m_mutex); + QWriteLocker l(&m_mutex); currentValue = m_cache.value(path, {QrcParser::Ptr(nullptr), 0}); if (currentValue.second == 1) { m_cache.remove(path); @@ -641,7 +642,7 @@ QrcParser::Ptr QrcCachePrivate::updatePath(const QString &path, const QString &c { QrcParser::Ptr newParser = QrcParser::parseQrcFile(path, contents); { - QMutexLocker l(&m_mutex); + QWriteLocker l(&m_mutex); QPair currentValue = m_cache.value(path, {QrcParser::Ptr(nullptr), 0}); currentValue.first = newParser; if (currentValue.second == 0) @@ -653,14 +654,14 @@ QrcParser::Ptr QrcCachePrivate::updatePath(const QString &path, const QString &c QrcParser::Ptr QrcCachePrivate::parsedPath(const QString &path) { - QMutexLocker l(&m_mutex); + QReadLocker l(&m_mutex); QPair currentValue = m_cache.value(path, {QrcParser::Ptr(nullptr), 0}); return currentValue.first; } void QrcCachePrivate::clear() { - QMutexLocker l(&m_mutex); + QWriteLocker l(&m_mutex); m_cache.clear(); }