diff --git a/cmds/app_process/app_main.cpp b/cmds/app_process/app_main.cpp index 2093579bb274a..72a21e326564c 100644 --- a/cmds/app_process/app_main.cpp +++ b/cmds/app_process/app_main.cpp @@ -299,9 +299,7 @@ int main(int argc, char* const argv[]) } if (!niceName.isEmpty()) { - const char* procName = niceName.string(); - pthread_setname_np(pthread_self(), procName); - runtime.setArgv0(procName); + runtime.setArgv0(niceName.string(), true /* setProcName */); } if (zygote) { diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index 315887d954e51..6cbc06cd88473 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -277,7 +277,15 @@ AndroidRuntime::~AndroidRuntime() return jniRegisterNativeMethods(env, className, gMethods, numMethods); } -void AndroidRuntime::setArgv0(const char* argv0) { +void AndroidRuntime::setArgv0(const char* argv0, bool setProcName) { + if (setProcName) { + int len = strlen(argv0); + if (len < 15) { + pthread_setname_np(pthread_self(), argv0); + } else { + pthread_setname_np(pthread_self(), argv0 + len - 15); + } + } memset(mArgBlockStart, 0, mArgBlockLength); strlcpy(mArgBlockStart, argv0, mArgBlockLength); } diff --git a/core/jni/android_util_Process.cpp b/core/jni/android_util_Process.cpp index dcc2aa02ed768..7487619072a01 100644 --- a/core/jni/android_util_Process.cpp +++ b/core/jni/android_util_Process.cpp @@ -547,9 +547,7 @@ void android_os_Process_setArgV0(JNIEnv* env, jobject clazz, jstring name) } if (!name8.isEmpty()) { - const char* procName = name8.string(); - pthread_setname_np(pthread_self(), procName); - AndroidRuntime::getRuntime()->setArgv0(procName); + AndroidRuntime::getRuntime()->setArgv0(name8.string(), true /* setProcName */); } } diff --git a/include/android_runtime/AndroidRuntime.h b/include/android_runtime/AndroidRuntime.h index 9a3b990c45bc9..ed77d9aead087 100644 --- a/include/android_runtime/AndroidRuntime.h +++ b/include/android_runtime/AndroidRuntime.h @@ -44,7 +44,7 @@ public: Tool, }; - void setArgv0(const char* argv0); + void setArgv0(const char* argv0, bool setProcName = false); void addOption(const char* optionString, void* extra_info = NULL); /**