diff --git a/frontend/drivers/platform_linux.h b/frontend/drivers/platform_linux.h index d4941d44ec..2dd163fd3c 100644 --- a/frontend/drivers/platform_linux.h +++ b/frontend/drivers/platform_linux.h @@ -173,6 +173,7 @@ struct android_app const ASensor* accelerometerSensor; uint64_t sensor_state_mask; char current_ime[PATH_MAX_LENGTH]; + bool input_alive; int16_t analog_state[MAX_PADS][MAX_AXIS]; int8_t hat_state[MAX_PADS][2]; jmethodID getIntent; diff --git a/input/drivers/android_input.c b/input/drivers/android_input.c index 740cf06190..5969661250 100644 --- a/input/drivers/android_input.c +++ b/input/drivers/android_input.c @@ -443,6 +443,7 @@ static void *android_input_init(void) { int32_t sdk; settings_t *settings = config_get_ptr(); + struct android_app *android_app = (struct android_app*)g_android; android_input_t *android = (android_input_t*) calloc(1, sizeof(*android)); @@ -470,6 +471,8 @@ static void *android_input_init(void) RARCH_WARN("Unable to open libandroid.so\n"); } + android_app->input_alive = true; + return android; } @@ -884,14 +887,8 @@ static void android_input_poll_memcpy(void *data) android_input_t *android = (android_input_t*)data; struct android_app *android_app = (struct android_app*)g_android; - if (!android) - return; - memcpy(&android->copy, &android->thread, sizeof(android->copy)); - if (!android_app) - return; - for (i = 0; i < MAX_PADS; i++) { for (j = 0; j < 2; j++) @@ -934,7 +931,8 @@ static void android_input_poll(void *data) } } - android_input_poll_memcpy(data); + if (android_app->input_alive) + android_input_poll_memcpy(data); } bool android_run_events(void *data) @@ -1038,6 +1036,8 @@ static void android_input_free_input(void *data) android->joypad->destroy(); android->joypad = NULL; + android_app->input_alive = false; + dylib_close((dylib_t)libandroid_handle); libandroid_handle = NULL;