< prev index next >
src/java.base/share/native/libjli/java.c
Print this page
*** 123,132 ****
--- 123,133 ----
static void PrintJavaVersion(JNIEnv *env, jboolean extraLF);
static void PrintUsage(JNIEnv* env, jboolean doXUsage);
static void ShowSettings(JNIEnv* env, char *optString);
static void ListModules(JNIEnv* env, char *optString);
+ static void SetNativeThreadName(JNIEnv* env, char *name);
static void SetPaths(int argc, char **argv);
static void DumpState();
static jboolean RemovableOption(char *option);
*** 323,332 ****
--- 324,334 ----
* thread from the one that executed main, even though they are
* the same C thread. This allows mainThread.join() and
* mainThread.isAlive() to work as expected.
*/
#define LEAVE() \
+ SetNativeThreadName(env, "DestroyJavaVM"); \
do { \
if ((*vm)->DetachCurrentThread(vm) != JNI_OK) { \
JLI_ReportErrorMessage(JVM_ERROR2); \
ret = 1; \
} \
*** 384,393 ****
--- 386,397 ----
if (!InitializeJVM(&vm, &env, &ifn)) {
JLI_ReportErrorMessage(JVM_ERROR1);
exit(1);
}
+ SetNativeThreadName(env, "main");
+
if (showSettings != NULL) {
ShowSettings(env, showSettings);
CHECK_EXCEPTION_LEAVE(1);
}
*** 1684,1693 ****
--- 1688,1724 ----
(*env)->CallStaticVoidMethod(env, cls, listModulesID,
USE_STDERR,
joptString);
}
+ /**
+ * Set native thread name as possible.
+ */
+ static void
+ SetNativeThreadName(JNIEnv *env, char *name)
+ {
+ jmethodID currentThreadID, setNativeNameID;
+ jobject currentThread;
+ jstring nameString;
+ jclass cls;
+
+ NULL_CHECK(cls = FindBootStrapClass(env, "java/lang/Thread"));
+ NULL_CHECK(currentThreadID = (*env)->GetStaticMethodID(env, cls,
+ "currentThread", "()Ljava/lang/Thread;"));
+ NULL_CHECK(currentThread = (*env)->CallStaticObjectMethod(env, cls,
+ currentThreadID));
+ NULL_CHECK(setNativeNameID = (*env)->GetMethodID(env, cls,
+ "setNativeName", "(Ljava/lang/String;Z)V"));
+ NULL_CHECK(nameString = (*env)->NewStringUTF(env, name));
+ (*env)->CallVoidMethod(env, currentThread, setNativeNameID,
+ nameString, JNI_TRUE);
+
+ if ((*env)->ExceptionOccurred(env)) {
+ JLI_ReportExceptionDescription(env);
+ }
+ }
+
/*
* Prints default usage or the Xusage message, see sun.launcher.LauncherHelper.java
*/
static void
PrintUsage(JNIEnv* env, jboolean doXUsage)
< prev index next >