diff options
| author | Connor McLaughlin <stenzek@gmail.com> | 2019-06-08 20:42:15 +1000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-06-08 20:42:15 +1000 |
| commit | bed2d66bedca7e9537d67d3e7a5506aee8717c8f (patch) | |
| tree | 259ece7474e30a0a0cb70aa0c2ff3fc098640a24 /Source/Android/jni/AndroidCommon/IDCache.cpp | |
| parent | 5a4e2a6b2f8555c590501649ed061592949fb480 (diff) | |
| parent | 0dec8feadb1c6ecca2de3764ccd413a8d950c573 (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.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()
|
