diff options
| author | zackhow <zackhow@gmail.com> | 2019-01-28 20:00:13 -0500 |
|---|---|---|
| committer | zackhow <zackhow@gmail.com> | 2019-01-28 21:42:12 -0500 |
| commit | 3cc10dcaf9468504e3ff8e9a091cb36a9937afc7 (patch) | |
| tree | 235bf269f7ab375aabff5b0581d07292467e5f87 /Source/Android/jni/MainAndroid.cpp | |
| parent | 4cd56673190884fca882e2022a5d6d254988afbc (diff) | |
Android: Call update touch pointer from thread.
Fixes crash in single core when attaching the JVM
Diffstat (limited to 'Source/Android/jni/MainAndroid.cpp')
| -rw-r--r-- | Source/Android/jni/MainAndroid.cpp | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/Source/Android/jni/MainAndroid.cpp b/Source/Android/jni/MainAndroid.cpp index 9ffa7d2b0d..bb148f6578 100644 --- a/Source/Android/jni/MainAndroid.cpp +++ b/Source/Android/jni/MainAndroid.cpp @@ -72,6 +72,22 @@ Common::Event s_update_main_frame_event; bool s_have_wm_user_stop = false; } // Anonymous namespace +void UpdatePointer() +{ + // Update touch pointer + JNIEnv* env; + int get_env_status = + IDCache::GetJavaVM()->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6); + + if (get_env_status == JNI_EDETACHED) + IDCache::GetJavaVM()->AttachCurrentThread(&env, nullptr); + + env->CallStaticVoidMethod(IDCache::GetNativeLibraryClass(), IDCache::GetUpdateTouchPointer()); + + if (get_env_status == JNI_EDETACHED) + IDCache::GetJavaVM()->DetachCurrentThread(); +} + void Host_NotifyMapLoaded() { } @@ -108,11 +124,8 @@ void Host_UpdateMainFrame() void Host_RequestRenderWindowSize(int width, int height) { - // Update touch pointer - JNIEnv* env; - IDCache::GetJavaVM()->AttachCurrentThread(&env, nullptr); - env->CallStaticVoidMethod(IDCache::GetNativeLibraryClass(), IDCache::GetUpdateTouchPointer()); - IDCache::GetJavaVM()->DetachCurrentThread(); + std::thread jnicall(UpdatePointer); + jnicall.join(); } bool Host_UINeedsControllerState() |
