summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuha Vuolle <juha.vuolle@qt.io>2023-10-12 11:15:25 +0300
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-10-19 08:15:05 +0000
commitb8a42e0d46350f4800d37f1d7b4b1b67e9287162 (patch)
tree4e766e88942be4d464b71aaa93be8a33bef1f468
parent06f5bac17ee854108e9c817166503f21d22bf7bf (diff)
Add thread protection to Android static string cache
The string cache is accessed in the Qt Android main activity thread, as wells as in JNI callbacks which execute in arbitrary Java threads. For clarity: the usage in code looks like this: "valueForStaticField<QtJniTypes::XYZ" There is a small chance that the cache is accessed concurrently. Pick-to: 6.5 Change-Id: I34c26e22347f65614b18a000b5d61f0737e3b49e Reviewed-by: Ivan Solovev <ivan.solovev@qt.io> Reviewed-by: Alex Blasche <alexander.blasche@qt.io> (cherry picked from commit 62045a447c688935091ce6b9fb0cc8a0ce03343c) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/bluetooth/android/jni_android.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/bluetooth/android/jni_android.cpp b/src/bluetooth/android/jni_android.cpp
index a255c540..3dc016f7 100644
--- a/src/bluetooth/android/jni_android.cpp
+++ b/src/bluetooth/android/jni_android.cpp
@@ -18,6 +18,7 @@ Q_DECLARE_LOGGING_CATEGORY(QT_BT_ANDROID)
typedef QHash<QByteArray, QJniObject> JCachedStringFields;
Q_GLOBAL_STATIC(JCachedStringFields, cachedStringFields)
+Q_GLOBAL_STATIC(QMutex, stringCacheMutex);
/*
* This function operates on the assumption that each
@@ -25,6 +26,7 @@ Q_GLOBAL_STATIC(JCachedStringFields, cachedStringFields)
*/
QJniObject valueFromStaticFieldCache(const char *key, const char *className, const char *fieldName)
{
+ QMutexLocker lock(stringCacheMutex());
JCachedStringFields::iterator it = cachedStringFields()->find(key);
if (it == cachedStringFields()->end()) {
QJniEnvironment env;