diff options
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/kernel/qjni.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/corelib/kernel/qjni.cpp b/src/corelib/kernel/qjni.cpp index 694463b9d8..22c0f03afc 100644 --- a/src/corelib/kernel/qjni.cpp +++ b/src/corelib/kernel/qjni.cpp @@ -221,17 +221,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->() |