diff options
| author | weihuoya <zwdreams@gmail.com> | 2019-05-29 20:22:26 +0800 |
|---|---|---|
| committer | weihuoya <zwdreams@gmail.com> | 2019-05-29 20:22:26 +0800 |
| commit | 0dec8feadb1c6ecca2de3764ccd413a8d950c573 (patch) | |
| tree | 2cb6c81d03fa9caf848aa41c67abf89df90da306 /Source/Android/jni/AndroidCommon/IDCache.cpp | |
| parent | 3132839113fde2078be4ee60bf8dbf5f15ce16cd (diff) | |
android: thread local env
Diffstat (limited to 'Source/Android/jni/AndroidCommon/IDCache.cpp')
| -rw-r--r-- | Source/Android/jni/AndroidCommon/IDCache.cpp | 24 |
1 files changed, 21 insertions, 3 deletions
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<void**>(&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()
|
