summaryrefslogtreecommitdiff
path: root/Source/Android/jni/MainAndroid.cpp
diff options
context:
space:
mode:
authorzackhow <zackhow@gmail.com>2019-01-28 20:00:13 -0500
committerzackhow <zackhow@gmail.com>2019-01-28 21:42:12 -0500
commit3cc10dcaf9468504e3ff8e9a091cb36a9937afc7 (patch)
tree235bf269f7ab375aabff5b0581d07292467e5f87 /Source/Android/jni/MainAndroid.cpp
parent4cd56673190884fca882e2022a5d6d254988afbc (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.cpp23
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()