From 89eb933be58c2fcd78ebb78ce8cc44c555f9869d Mon Sep 17 00:00:00 2001 From: michaelrgb Date: Tue, 2 Jan 2018 11:30:30 +0000 Subject: [PATCH] If user resumes APK after server shutdown, restart cmdthread. Also make sure ANativeActivity_finish/DetachCurrentThread are called. --- renderdoccmd/renderdoccmd_android.cpp | 33 +++++++++++++-------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/renderdoccmd/renderdoccmd_android.cpp b/renderdoccmd/renderdoccmd_android.cpp index 30854a3fe..9502a10ff 100644 --- a/renderdoccmd/renderdoccmd_android.cpp +++ b/renderdoccmd/renderdoccmd_android.cpp @@ -356,18 +356,17 @@ vector getRenderdoccmdArgs() (jstring)env->CallObjectMethod(intent, gseid, env->NewStringUTF("renderdoccmd")); vector ret; - if(!jsParam1) - return ret; // No arg value found - - ret.push_back("renderdoccmd"); - - const char *param1 = env->GetStringUTFChars(jsParam1, 0); - istringstream iss(param1); - while(iss) + if(jsParam1) // Check if arg value found { - string sub; - iss >> sub; - ret.push_back(sub); + ret.push_back("renderdoccmd"); + const char *param1 = env->GetStringUTFChars(jsParam1, 0); + istringstream iss(param1); + while(iss) + { + string sub; + iss >> sub; + ret.push_back(sub); + } } android_state->activity->vm->DetachCurrentThread(); @@ -377,10 +376,8 @@ vector getRenderdoccmdArgs() void *cmdthread(void *) { vector args = getRenderdoccmdArgs(); - if(!args.size()) - return NULL; // Nothing for APK to do. - - renderdoccmd(GlobalEnvironment(), args); + if(args.size()) + renderdoccmd(GlobalEnvironment(), args); // activity is done and should be closed ANativeActivity_finish(android_state->activity); @@ -394,9 +391,11 @@ void handle_cmd(android_app *app, int32_t cmd) { case APP_CMD_INIT_WINDOW: { - if(cmdthread_handle == 0) - pthread_create(&cmdthread_handle, NULL, cmdthread, NULL); + if(cmdthread_handle != 0) + // If user resumes APK after server shutdown, restart the thread. + pthread_join(cmdthread_handle, NULL); + pthread_create(&cmdthread_handle, NULL, cmdthread, NULL); break; } case APP_CMD_WINDOW_REDRAW_NEEDED: