From 0dec8feadb1c6ecca2de3764ccd413a8d950c573 Mon Sep 17 00:00:00 2001 From: weihuoya Date: Wed, 29 May 2019 20:22:26 +0800 Subject: android: thread local env --- Source/Android/jni/AndroidCommon/IDCache.cpp | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'Source/Android/jni/AndroidCommon/IDCache.cpp') diff --git a/Source/Android/jni/AndroidCommon/IDCache.cpp b/Source/Android/jni/AndroidCommon/IDCache.cpp index 71e2ae9d59..19b7147ba4 100644 --- a/Source/Android/jni/AndroidCommon/IDCache.cpp +++ b/Source/Android/jni/AndroidCommon/IDCache.cpp @@ -29,9 +29,27 @@ static jmethodID s_do_rumble; namespace IDCache { -JavaVM* GetJavaVM() -{ - return s_java_vm; +JNIEnv* GetEnvForThread() +{ + thread_local static struct OwnedEnv + { + OwnedEnv() + { + status = s_java_vm->GetEnv(reinterpret_cast(&env), JNI_VERSION_1_6); + if (status == JNI_EDETACHED) + s_java_vm->AttachCurrentThread(&env, nullptr); + } + + ~OwnedEnv() + { + if (status == JNI_EDETACHED) + s_java_vm->DetachCurrentThread(); + } + + int status; + JNIEnv* env = nullptr; + } owned; + return owned.env; } jclass GetNativeLibraryClass() -- cgit v1.2.3