summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp11
-rw-r--r--src/plugins/platforms/android/qandroidassetsfileenginehandler.h5
2 files changed, 12 insertions, 4 deletions
diff --git a/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp b/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp
index b112e265a5..4968b8f188 100644
--- a/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp
+++ b/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp
@@ -262,17 +262,20 @@ private:
AndroidAssetsFileEngineHandler::AndroidAssetsFileEngineHandler()
: m_assetsCache(std::max(5, qgetenv("QT_ANDROID_MAX_ASSETS_CACHE_SIZE").toInt()))
, m_hasPrepopulatedCache(false)
+ , m_hasTriedPrepopulatingCache(false)
{
m_assetManager = QtAndroid::assetManager();
- prepopulateCache();
}
AndroidAssetsFileEngineHandler::~AndroidAssetsFileEngineHandler()
{
}
-void AndroidAssetsFileEngineHandler::prepopulateCache()
+void AndroidAssetsFileEngineHandler::prepopulateCache() const
{
+ Q_ASSERT(!m_hasTriedPrepopulatingCache);
+ m_hasTriedPrepopulatingCache = true;
+
QMutexLocker locker(&m_assetsCacheMutext);
Q_ASSERT(m_assetsCache.isEmpty());
@@ -364,7 +367,11 @@ QAbstractFileEngine * AndroidAssetsFileEngineHandler::create(const QString &file
if (!path.size())
path = fileName.left(fileName.length() - 1).toUtf8();
+
m_assetsCacheMutext.lock();
+ if (!m_hasTriedPrepopulatingCache)
+ prepopulateCache();
+
QSharedPointer<AndroidAssetDir> *aad = m_assetsCache.object(path);
m_assetsCacheMutext.unlock();
if (!aad) {
diff --git a/src/plugins/platforms/android/qandroidassetsfileenginehandler.h b/src/plugins/platforms/android/qandroidassetsfileenginehandler.h
index d56367d4d8..ac16ad7b79 100644
--- a/src/plugins/platforms/android/qandroidassetsfileenginehandler.h
+++ b/src/plugins/platforms/android/qandroidassetsfileenginehandler.h
@@ -58,12 +58,13 @@ public:
QAbstractFileEngine *create(const QString &fileName) const;
private:
- void prepopulateCache();
+ void prepopulateCache() const;
AAssetManager *m_assetManager;
mutable QCache<QByteArray, QSharedPointer<AndroidAssetDir>> m_assetsCache;
mutable QMutex m_assetsCacheMutext;
- bool m_hasPrepopulatedCache;
+ mutable bool m_hasPrepopulatedCache;
+ mutable bool m_hasTriedPrepopulatingCache;
};
#endif // QANDROIDASSETSFILEENGINEHANDLER_H