From 9b6425c1da98f6ae6ac67bec2d9ff29f5982f700 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 21 Oct 2012 17:30:02 +0200 Subject: [PATCH] (Android) Use DetachCurrentThread - first stab at setting up clean deiniting --- android/native/jni/android-general.h | 1 + android/native/jni/input_android.c | 13 +++++++++++++ android/native/jni/main.c | 6 +++--- gfx/context/androidegl_ctx.c | 3 +-- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/android/native/jni/android-general.h b/android/native/jni/android-general.h index 8c0956537e..63c681ec91 100644 --- a/android/native/jni/android-general.h +++ b/android/native/jni/android-general.h @@ -20,6 +20,7 @@ struct droid const ASensor* accelerometerSensor; ASensorEventQueue* sensorEventQueue; + bool init_quit; bool window_inited; unsigned animating; unsigned width; diff --git a/android/native/jni/input_android.c b/android/native/jni/input_android.c index 1a21713abb..913b25e757 100644 --- a/android/native/jni/input_android.c +++ b/android/native/jni/input_android.c @@ -52,6 +52,7 @@ static int16_t android_input_state(void *data, const struct retro_keybind **retr (void)index; (void)id; + return 0; } @@ -60,6 +61,18 @@ static bool android_input_key_pressed(void *data, int key) (void)data; (void)key; + switch (key) + { + case RARCH_QUIT_KEY: + if(g_android.init_quit) + return true; + else + return false; + break; + default: + (void)0; + } + return false; } diff --git a/android/native/jni/main.c b/android/native/jni/main.c index 75863a4490..73f56bfda8 100644 --- a/android/native/jni/main.c +++ b/android/native/jni/main.c @@ -48,9 +48,7 @@ static void engine_handle_cmd(struct android_app* app, int32_t cmd) break; case APP_CMD_TERM_WINDOW: // The window is being hidden or closed, clean it up. - rarch_main_deinit(); - rarch_deinit_msg_queue(); - rarch_main_clear_state(); + g_android.init_quit = true; break; case APP_CMD_GAINED_FOCUS: // When our app gains focus, we start monitoring the accelerometer. @@ -106,6 +104,8 @@ static void android_get_char_argv(char *argv, size_t sizeof_argv, const char *ar strncpy(argv, test_argv, sizeof_argv); (*env)->ReleaseStringUTFChars(env, jsParam1, test_argv); + + (*rarch_vm)->DetachCurrentThread(rarch_vm); } #define MAX_ARGS 32 diff --git a/gfx/context/androidegl_ctx.c b/gfx/context/androidegl_ctx.c index 2cfef26f90..2034c77eb8 100644 --- a/gfx/context/androidegl_ctx.c +++ b/gfx/context/androidegl_ctx.c @@ -192,11 +192,10 @@ static void gfx_ctx_check_window(bool *quit, */ // Check if we are exiting. - if (state->destroyRequested != 0) + if (state->destroyRequested != 0 || g_android.init_quit) { gl->quitting = true; *quit = true; - gfx_ctx_destroy(); return; }