summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qjni.cpp
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2015-03-31 18:47:56 +0200
committerLiang Qi <liang.qi@theqtcompany.com>2015-04-01 09:10:26 +0200
commit0e6ee136c91432d4ceeeda64e5a5fa88231398d4 (patch)
tree6060e002af2900007895f6efa757989dd4c190c9 /src/corelib/kernel/qjni.cpp
parent418869d9158ea5cd998ba30778b0b7173b48161b (diff)
parent17294c5e4d15d5776f6e414b03671a4a9ed4993d (diff)
Merge remote-tracking branch 'origin/5.5' into dev
Conflicts: src/testlib/qtestblacklist.cpp src/widgets/accessible/qaccessiblewidgets.cpp Change-Id: If032adb9296428f62384ed835dbf41ee7a0b886c
Diffstat (limited to 'src/corelib/kernel/qjni.cpp')
-rw-r--r--src/corelib/kernel/qjni.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/corelib/kernel/qjni.cpp b/src/corelib/kernel/qjni.cpp
index 2290a74c31..097f641d19 100644
--- a/src/corelib/kernel/qjni.cpp
+++ b/src/corelib/kernel/qjni.cpp
@@ -230,17 +230,18 @@ QJNIEnvironmentPrivate::QJNIEnvironmentPrivate()
: jniEnv(0)
{
JavaVM *vm = QtAndroidPrivate::javaVM();
- if (vm->GetEnv((void**)&jniEnv, JNI_VERSION_1_6) == JNI_EDETACHED) {
+ const jint ret = vm->GetEnv((void**)&jniEnv, JNI_VERSION_1_6);
+ if (ret == JNI_OK) // Already attached
+ return;
+
+ if (ret == JNI_EDETACHED) { // We need to (re-)attach
JavaVMAttachArgs args = { JNI_VERSION_1_6, qJniThreadName, Q_NULLPTR };
if (vm->AttachCurrentThread(&jniEnv, &args) != JNI_OK)
return;
- }
- if (!jniEnv)
- return;
-
- if (!jniEnvTLS->hasLocalData())
- jniEnvTLS->setLocalData(new QJNIEnvironmentPrivateTLS);
+ if (!jniEnvTLS->hasLocalData()) // If we attached the thread we own it.
+ jniEnvTLS->setLocalData(new QJNIEnvironmentPrivateTLS);
+ }
}
JNIEnv *QJNIEnvironmentPrivate::operator->()