diff options
| author | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2023-10-11 13:54:16 +0200 |
|---|---|---|
| committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2023-10-19 20:21:51 +0200 |
| commit | 08bb24dd0a5c97bfefa8bb29d6c43af4525abd64 (patch) | |
| tree | 56498eeb2f1db85da9d06c47a66f7a065af420ee /src | |
| parent | ba1eec62a864428e4486b1e15f41ff06fc8f60d4 (diff) | |
JNI: make QJniArray class use stored JNI environment
Instead of creating a temporary QJniEnvironment for each access to the
array, reuse the one stored in the QJniObject. This is much more
efficient, and also protects against invalid access to the array from
multiple threads.
Change-Id: Id253a51ca64d4b3af333b14ec62ae176e1663604
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Diffstat (limited to 'src')
| -rw-r--r-- | src/corelib/kernel/qjniarray.h | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/corelib/kernel/qjniarray.h b/src/corelib/kernel/qjniarray.h index ba79e27b8ef..96eaafca836 100644 --- a/src/corelib/kernel/qjniarray.h +++ b/src/corelib/kernel/qjniarray.h @@ -86,7 +86,7 @@ public: qsizetype size() const { if (jarray array = object<jarray>()) - return QJniEnvironment()->GetArrayLength(array); + return jniEnv()->GetArrayLength(array); return 0; } @@ -193,7 +193,7 @@ public: const T operator[](qsizetype i) const { return at(i); } // const return value to disallow assignment T at(qsizetype i) const { - QJniEnvironment env; + JNIEnv *env = jniEnv(); if constexpr (std::is_convertible_v<jobject, T>) { return T{env->GetObjectArrayElement(object<jobjectArray>(), i)}; } else { @@ -219,7 +219,7 @@ public: } auto asContainer() const { - QJniEnvironment env; + JNIEnv *env = jniEnv(); if constexpr (std::is_same_v<T, jobject>) { QList<jobject> res; res.reserve(size()); |
