Skip to content

Commit

Permalink
HERESDK-3466: Preserve thread name after attaching it to JVM (#1597)
Browse files Browse the repository at this point in the history
* HERESDK-3466: Preserve thread name after attaching it to JVM

When native thread is attached to JVM, then it's name is taken from `JavaVMAttachArgs`. When no `JavaVMAttachArgs`, or no `JavaVMAttachArgs::name` passed, then JVM on its own decides on taming thread. Those names are not descriptive.
To preserve thread name, pass the currently set thread name in `JavaVMAttachArgs::name`.
`pthread_getname_np` was introduced in API 26, hence use more generic approach.

---------

Signed-off-by: Mykhailo Diachenko <ext-mykhailo.z.diachenko@here.com>
  • Loading branch information
diachenko-mischa authored Jul 29, 2024
1 parent 0f996dd commit 18b7de6
Showing 1 changed file with 18 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,17 +32,33 @@ static JavaVM* jvm;
static pthread_key_t s_thread_key;
char *get_thread_name()
{
#ifdef __ANDROID__
thread_local char name[17] = {0};
if (prctl(PR_GET_NAME, name) == 0)
{
return name;
}
#endif
return nullptr;
}

JNIEnv*
attach_current_thread( )
{
JNIEnv* jniEnv;
int envState = jvm->GetEnv( reinterpret_cast< void** >( &jniEnv ), JNI_VERSION_1_6 );
if ( envState == JNI_EDETACHED )
{
JavaVMAttachArgs args;
args.version = JNI_VERSION_1_6;
args.group = NULL;
args.name = get_thread_name();
#ifdef __ANDROID__
jvm->AttachCurrentThread( &jniEnv, nullptr );
jvm->AttachCurrentThread( &jniEnv, &args );
#else // ifdef __ANDROID__
jvm->AttachCurrentThread( reinterpret_cast< void** >( &jniEnv ), nullptr );
jvm->AttachCurrentThread( reinterpret_cast< void** >( &jniEnv ), &args );
#endif // ifdef __ANDROID__
}

Expand Down

0 comments on commit 18b7de6

Please # to comment.