From 3cc10dcaf9468504e3ff8e9a091cb36a9937afc7 Mon Sep 17 00:00:00 2001 From: zackhow Date: Mon, 28 Jan 2019 20:00:13 -0500 Subject: [PATCH] Android: Call update touch pointer from thread. Fixes crash in single core when attaching the JVM --- Source/Android/jni/MainAndroid.cpp | 23 ++++++++++++++++++----- 1 file 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(&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()