summaryrefslogtreecommitdiff
path: root/Source/Android/jni/AndroidCommon/IDCache.cpp
diff options
context:
space:
mode:
authorConnor McLaughlin <stenzek@gmail.com>2019-06-08 20:42:15 +1000
committerGitHub <noreply@github.com>2019-06-08 20:42:15 +1000
commitbed2d66bedca7e9537d67d3e7a5506aee8717c8f (patch)
tree259ece7474e30a0a0cb70aa0c2ff3fc098640a24 /Source/Android/jni/AndroidCommon/IDCache.cpp
parent5a4e2a6b2f8555c590501649ed061592949fb480 (diff)
parent0dec8feadb1c6ecca2de3764ccd413a8d950c573 (diff)
Merge pull request #8117 from weihuoya/threaded_env
android: get java env from thread local storage
Diffstat (limited to 'Source/Android/jni/AndroidCommon/IDCache.cpp')
-rw-r--r--Source/Android/jni/AndroidCommon/IDCache.cpp24
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()