Thanks,
Yasumasa
2016/04/19 22:43 "Yasumasa Suenaga" <yasue...@gmail.com
<mailto:yasue...@gmail.com>>:
>
> Hi David,
>
> Thank you for your comment.
> I uploaded new webrev. Could you review again?
>
> - hotspot:
> http://cr.openjdk.java.net/~ysuenaga/JDK-8152690/webrev.04/hotspot/
>
> - jdk:
> http://cr.openjdk.java.net/~ysuenaga/JDK-8152690/webrev.04/jdk/
>
>
>> That aside I'm not sure why you do this so late in the process, I
would have done it immediately after here:
>
>
> I think that native thread name ("main") should be set just before
> main method call.
> However, main thread is already started, so I moved it as you suggested.
>
>
>> One thing I dislike about the current structure is that we have to
go from char* to java.lang.String to call setNativeName which then calls
JVM_SetNativeThreadName which converts the j.l.String back to a char* !
>
>
> SoI proposed to export new JVM function to set native thread name with
> const char *.
>
>
> Thanks,
>
> Yasumasa
>
>
>
> On 2016/04/19 14:04, David Holmes wrote:
>>
>> Hi Yasumasa,
>>
>> Thanks for persevering with this to get it into the current form.
Sorry I haven't been able to do a detailed review until now.
>>
>> On 19/04/2016 9:28 AM, Yasumasa Suenaga wrote:
>>>
>>> Hi Gerard,
>>>
>>> 2016/04/19 3:14 "Gerard Ziemski" <gerard.ziem...@oracle.com
<mailto:gerard.ziem...@oracle.com>
>>> <mailto:gerard.ziem...@oracle.com <mailto:gerard.ziem...@oracle.com>>>:
>>> >
>>> > hi Yasumasa,
>>> >
>>> > Nice work. I have 2 questions:
>>> >
>>> > ========
>>> > File: java.c
>>> >
>>> > #1 Shouldn’t we be checking for “(*env)->ExceptionOccurred(env)”
>>> after every single JNI call? In this example instead of NULL_CHECK,
>>> should we be using CHECK_EXCEPTION_NULL_LEAVE macro?
>>>
>>> It is not critical if we encounter error at JNI function call because
>>> we cannot set native thread name only.
>>> So I think that we do not need to leave from launcher process.
>>
>>
>> I agree we do not need to abort if an exception occurs (and in fact
I don't think an exception is even possible from this code), but we
should ensure any pending exception is cleared before any futher JNI
calls might be made. Note that NULL_CHECK is already used extensively
throughout the launcher code - so if this usage is wrong then it is all
wrong! More on this code below ...
>>
>> Other comments:
>>
>> hotspot/src/share/vm/prims/jvm.cpp
>>
>> Please add a comment to the method now that you removed the internal
comment:
>>
>> // Sets the native thread name for a JavaThread. If specifically
>> // requested JNI-attached threads can also have their native name set;
>> // otherwise we do not modify JNI-attached threads as it may interfere
>> // with the application that created them.
>>
>> ---
>>
>> jdk/src/java.base/share/classes/java/lang/Thread.java
>>
>> Please add the following comments:
>>
>> + // Don't modify JNI-attached threads
>> setNativeName(name, false);
>>
>> + // May be called directly via JNI or reflection (when permitted) to
>> + // allow JNI-attached threads to set their native name
>> private native void setNativeName(String name, boolean
allowAttachedThread);
>>
>> ---
>>
>> jd/src/java.base/share/native/libjli/java.c
>>
>> 328 #define LEAVE() \
>> 329 SetNativeThreadName(env, "DestroyJavaVM"); \
>>
>> I was going to suggest this be set later, but realized we have to be
attached to do this and that happens inside DestroyJavaVM. :)
>>
>> + /* Set native thread name. */
>> + SetNativeThreadName(env, "main");
>>
>> The comment is redundant given the name of the method. That aside
I'm not sure why you do this so late in the process, I would have done
it immediately after here:
>>
>> 386 if (!InitializeJVM(&vm, &env, &ifn)) {
>> 387 JLI_ReportErrorMessage(JVM_ERROR1);
>> 388 exit(1);
>> 389 }
>> + SetNativeThreadName(env, "main");
>>
>>
>> + /**
>> + * Set native thread name as possible.
>> + */
>>
>> Other than the as->if change I'm unclear where the "possible" bit
comes into play - why would it not be possible?
>>
>> 1705 NULL_CHECK(cls = FindBootStrapClass(env, "java/lang/Thread"));
>> 1706 NULL_CHECK(currentThreadID = (*env)->GetStaticMethodID(env,
cls,
>> 1707 "currentThread",
"()Ljava/lang/Thread;"));
>> 1708 NULL_CHECK(currentThread =
(*env)->CallStaticObjectMethod(env, cls,
>> 1709 currentThreadID));
>> 1710 NULL_CHECK(setNativeNameID = (*env)->GetMethodID(env, cls,
>> 1711 "setNativeName",
"(Ljava/lang/String;Z)V"));
>> 1712 NULL_CHECK(nameString = (*env)->NewStringUTF(env, name));
>> 1713 (*env)->CallVoidMethod(env, currentThread, setNativeNameID,
>> 1714 nameString, JNI_TRUE);
>>
>> As above NULL_CHECK is fine here, but we should check for and clear
any pending exception after CallVoidMethod.
>>
>> One thing I dislike about the current structure is that we have to
go from char* to java.lang.String to call setNativeName which then calls
JVM_SetNativeThreadName which converts the j.l.String back to a char* !
Overall I wonder about the affect on startup cost. But if there is an
issue we can revisit this.
>>
>> Thanks,
>> David
>> -----
>>
>>
>>> > #2 Should the comment for “SetNativeThreadName” be “Set native
thread
>>> name if possible.” not "Set native thread name as possible.”?
>>>
>>> Sorry for my bad English :-)
>>>
>>> Thanks,
>>>
>>> Yasumasa
>>>
>>> > cheers
>>> >
>>> > > On Apr 16, 2016, at 4:29 AM, Yasumasa Suenaga
<yasue...@gmail.com <mailto:yasue...@gmail.com>
>>> <mailto:yasue...@gmail.com <mailto:yasue...@gmail.com>>> wrote:
>>> > >
>>> > > Hi David,
>>> > >
>>> > > I uploaded new webrev:
>>> > >
>>> > > - hotspot:
>>> > >
http://cr.openjdk.java.net/~ysuenaga/JDK-8152690/webrev.03/hotspot/
>>> > >
>>> > > - jdk:
>>> > > http://cr.openjdk.java.net/~ysuenaga/JDK-8152690/webrev.03/jdk/
>>> > >
>>> > >
>>> > >> it won't work unless you change the semantics of setName so I'm
>>> not sure what you were thinking here. To take advantage of an arg
taking
>>> JVM_SetNativThreadName you would need to call it directly as no Java
>>> code will call it . ???
>>> > >
>>> > > I added a flag for setting native thread name to JNI-attached
thread.
>>> > > This change can set native thread name if main thread changes to
>>> JNI-attached thread.
>>> > >
>>> > >
>>> > > Thanks,
>>> > >
>>> > > Yasumasa
>>> > >
>>> > >
>>> > > On 2016/04/16 16:11, David Holmes wrote:
>>> > >> On 16/04/2016 3:27 PM, Yasumasa Suenaga wrote:
>>> > >>> Hi David,
>>> > >>>
>>> > >>>> That change in behaviour may be a problem, it could be
considered a
>>> > >>>> regression that setName stops setting the native thread
main, even
>>> > >>>> though we never really intended it to work in the first place.
>>> :( Such
>>> > >>>> a change needs to go through CCC.
>>> > >>>
>>> > >>> I understood.
>>> > >>> Can I send CCC request?
>>> > >>> (I'm jdk 9 commiter, but I'm not employee at Oracle.)
>>> > >>
>>> > >> Sorry you can't file a CCC request, you would need a sponsor for
>>> that. But at this stage I don't think I agree with the proposed change
>>> because of the change in behaviour - there's no way to restore the
>>> "broken" behaviour.
>>> > >>
>>> > >>> I want to continue to discuss about it on JDK-8154331 [1].
>>> > >>
>>> > >> Okay we can do that.
>>> > >>
>>> > >>>
>>> > >>>> Further, we expect the launcher to use the supported JNI
>>> interface (as
>>> > >>>> other processes would), not the internal JVM interface that
>>> exists for
>>> > >>>> the JDK sources to communicate with the JVM.
>>> > >>>
>>> > >>> I think that we do not use JVM interface if we add new method in
>>> > >>> LauncherHelper as below:
>>> > >>> ----------------
>>> > >>> diff -r f02139a1ac84
>>> > >>> src/java.base/share/classes/sun/launcher/LauncherHelper.java
>>> > >>> ---
a/src/java.base/share/classes/sun/launcher/LauncherHelper.java
>>> > >>> Wed Apr 13 14:19:30 2016 +0000
>>> > >>> +++
b/src/java.base/share/classes/sun/launcher/LauncherHelper.java
>>> > >>> Sat Apr 16 11:25:53 2016 +0900
>>> > >>> @@ -960,4 +960,8 @@
>>> > >>> else
>>> > >>> return md.toNameAndVersion() + " (" + loc + ")";
>>> > >>> }
>>> > >>> +
>>> > >>> + static void setNativeThreadName(String name) {
>>> > >>> + Thread.currentThread().setName(name);
>>> > >>> + }
>>> > >>
>>> > >> You could also make that call via JNI directly, so not sure the
>>> helper adds much here. But it won't work unless you change the
semantics
>>> of setName so I'm not sure what you were thinking here. To take
>>> advantage of an arg taking JVM_SetNativThreadName you would need to
call
>>> it directly as no Java code will call it . ???
>>> > >>
>>> > >> David
>>> > >> -----
>>> > >>
>>> > >>> }
>>> > >>> diff -r f02139a1ac84 src/java.base/share/native/libjli/java.c
>>> > >>> --- a/src/java.base/share/native/libjli/java.c Wed Apr 13
14:19:30
>>> > >>> 2016 +0000
>>> > >>> +++ b/src/java.base/share/native/libjli/java.c Sat Apr 16
11:25:53
>>> > >>> 2016 +0900
>>> > >>> @@ -125,6 +125,7 @@
>>> > >>> 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);
>>> > >>>
>>> > >>> @@ -325,6 +326,7 @@
>>> > >>> * mainThread.isAlive() to work as expected.
>>> > >>> */
>>> > >>> #define LEAVE() \
>>> > >>> + SetNativeThreadName(env, "DestroyJavaVM"); \
>>> > >>> do { \
>>> > >>> if ((*vm)->DetachCurrentThread(vm) != JNI_OK) { \
>>> > >>> JLI_ReportErrorMessage(JVM_ERROR2); \
>>> > >>> @@ -488,6 +490,9 @@
>>> > >>> mainArgs = CreateApplicationArgs(env, argv, argc);
>>> > >>> CHECK_EXCEPTION_NULL_LEAVE(mainArgs);
>>> > >>>
>>> > >>> + /* Set native thread name. */
>>> > >>> + SetNativeThreadName(env, "main");
>>> > >>> +
>>> > >>> /* Invoke main method. */
>>> > >>> (*env)->CallStaticVoidMethod(env, mainClass, mainID,
mainArgs);
>>> > >>>
>>> > >>> @@ -1686,6 +1691,22 @@
>>> > >>> joptString);
>>> > >>> }
>>> > >>>
>>> > >>> +/**
>>> > >>> + * Set native thread name as possible.
>>> > >>> + */
>>> > >>> +static void
>>> > >>> +SetNativeThreadName(JNIEnv *env, char *name)
>>> > >>> +{
>>> > >>> + jmethodID setNativeThreadNameID;
>>> > >>> + jstring nameString;
>>> > >>> + jclass cls = GetLauncherHelperClass(env);
>>> > >>> + NULL_CHECK(cls);
>>> > >>> + NULL_CHECK(setNativeThreadNameID =
>>> (*env)->GetStaticMethodID(env, cls,
>>> > >>> + "setNativeThreadName", "(Ljava/lang/String;)V"));
>>> > >>> + NULL_CHECK(nameString = (*env)->NewStringUTF(env, name));
>>> > >>> + (*env)->CallStaticVoidMethod(env, cls,
setNativeThreadNameID,
>>> > >>> nameString);
>>> > >>> +}
>>> > >>> +
>>> > >>> /*
>>> > >>> * Prints default usage or the Xusage message, see
>>> > >>> sun.launcher.LauncherHelper.java
>>> > >>> */
>>> > >>> ----------------
>>> > >>>
>>> > >>> So I want to add new arg to JVM_SetNativeThreadName().
>>> > >>>
>>> > >>>> However this is still a change to the exported JVM
interface and so
>>> > >>>> has to be approved.
>>> > >>>
>>> > >>> Do you mean that this change needs CCC?
>>> > >>>
>>> > >>>
>>> > >>> Thanks,
>>> > >>>
>>> > >>> Yasumasa
>>> > >>>
>>> > >>>
>>> > >>> [1]
>>> > >>>
>>>
http://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/2016-April/019034.html
>>> > >>>
>>> > >>>
>>> > >>>
>>> > >>> On 2016/04/16 7:26, David Holmes wrote:
>>> > >>>> On 15/04/2016 11:20 PM, Yasumasa Suenaga wrote:
>>> > >>>>> Hi David,
>>> > >>>>>
>>> > >>>>>> I think it is a bug based on the comment here:
>>> > >>>>>>
>>> > >>>>>> JavaThread(bool is_attaching_via_jni = false); // for main
>>> thread and
>>> > >>>>>> JNI attached threads
>>> > >>>>>
>>> > >>>>> I filed it to JBS as JDK-8154331.
>>> > >>>>> I will send review request to hotspot-runtime-dev.
>>> > >>>>>
>>> > >>>>>
>>> > >>>>>> Though that will introduce a change in behaviour by itself as
>>> setName
>>> > >>>>>> will no longer set the native name for the main thread.
>>> > >>>>>
>>> > >>>>> I know.
>>> > >>>>
>>> > >>>> That change in behaviour may be a problem, it could be
considered a
>>> > >>>> regression that setName stops setting the native thread
main, even
>>> > >>>> though we never really intended it to work in the first place.
>>> :( Such
>>> > >>>> a change needs to go through CCC.
>>> > >>>>
>>> > >>>>> I checked changeset history.
>>> > >>>>> JVM_SetNativeThreadName() was introduced in JDK-7098194,
and it is
>>> > >>>>> backported JDK 8.
>>> > >>>>
>>> > >>>> Yes this all came in as part of the OSX port in 7u2.
>>> > >>>>
>>> > >>>>> However, this function seems to be called from
>>> Thread#setNativeName()
>>> > >>>>> only.
>>> > >>>>> In addition, Thread#setNativeName() is private method.
>>> > >>>>>
>>> > >>>>> Thus I think that we can add an argument to
>>> JVM_SetNativeThreadName()
>>> > >>>>> for force setting.
>>> > >>>>> (e.g. "bool forced")
>>> > >>>>>
>>> > >>>>> It makes a change of JVM API.
>>> > >>>>> However, this function is NOT public, so I think we can
add one
>>> more
>>> > >>>>> argument.
>>> > >>>>>
>>> > >>>>> What do you think about this?
>>> > >>>>> If it is accepted, we can set native thread name from Java
>>> launcher.
>>> > >>>>
>>> > >>>> The private/public aspect of the Java API is not really at
>>> issue. Yes
>>> > >>>> we would add another arg to the JVM function to allow it to
apply to
>>> > >>>> JNI-attached threads as well (I'd prefer the arg reflect that
>>> not just
>>> > >>>> "force"). However this is still a change to the exported JVM
>>> interface
>>> > >>>> and so has to be approved. Further, we expect the launcher to
>>> use the
>>> > >>>> supported JNI interface (as other processes would), not the
internal
>>> > >>>> JVM interface that exists for the JDK sources to communicate
>>> with the
>>> > >>>> JVM.
>>> > >>>>
>>> > >>>> David
>>> > >>>> -----
>>> > >>>>
>>> > >>>>>
>>> > >>>>> Thanks,
>>> > >>>>>
>>> > >>>>> Yasumasa
>>> > >>>>>
>>> > >>>>>
>>> > >>>>> On 2016/04/15 19:16, David Holmes wrote:
>>> > >>>>>> Hi Yasumasa,
>>> > >>>>>>
>>> > >>>>>> On 15/04/2016 6:53 PM, Yasumasa Suenaga wrote:
>>> > >>>>>>> Hi David,
>>> > >>>>>>>
>>> > >>>>>>>> The fact that the "main" thread is not tagged as being a
>>> JNI-attached
>>> > >>>>>>>> thread seems accidental to me
>>> > >>>>>>>
>>> > >>>>>>> Should I file it to JBS?
>>> > >>>>>>
>>> > >>>>>> I think it is a bug based on the comment here:
>>> > >>>>>>
>>> > >>>>>> JavaThread(bool is_attaching_via_jni = false); // for main
>>> thread and
>>> > >>>>>> JNI attached threads
>>> > >>>>>>
>>> > >>>>>> Though that will introduce a change in behaviour by itself as
>>> setName
>>> > >>>>>> will no longer set the native name for the main thread.
>>> > >>>>>>
>>> > >>>>>>> I think that we can fix as below:
>>> > >>>>>>> ---------------
>>> > >>>>>>> diff -r 52aa0ee93b32 src/share/vm/runtime/thread.cpp
>>> > >>>>>>> --- a/src/share/vm/runtime/thread.cpp Thu Apr 14 13:31:11
>>> 2016 +0200
>>> > >>>>>>> +++ b/src/share/vm/runtime/thread.cpp Fri Apr 15 17:50:10
>>> 2016 +0900
>>> > >>>>>>> @@ -3592,7 +3592,7 @@
>>> > >>>>>>> #endif // INCLUDE_JVMCI
>>> > >>>>>>>
>>> > >>>>>>> // Attach the main thread to this os thread
>>> > >>>>>>> - JavaThread* main_thread = new JavaThread();
>>> > >>>>>>> + JavaThread* main_thread = new JavaThread(true);
>>> > >>>>>>> main_thread->set_thread_state(_thread_in_vm);
>>> > >>>>>>> main_thread->initialize_thread_current();
>>> > >>>>>>> // must do this before set_active_handles
>>> > >>>>>>> @@ -3776,6 +3776,9 @@
>>> > >>>>>>> // Notify JVMTI agents that VM initialization is complete
>>> - nop if
>>> > >>>>>>> no agents.
>>> > >>>>>>> JvmtiExport::post_vm_initialized();
>>> > >>>>>>>
>>> > >>>>>>> + // Change attach status to "attached"
>>> > >>>>>>> + main_thread->set_done_attaching_via_jni();
>>> > >>>>>>> +
>>> > >>>>>>
>>> > >>>>>> I think we can do this straight after the JavaThread
constructor.
>>> > >>>>>>
>>> > >>>>>>> if (TRACE_START() != JNI_OK) {
>>> > >>>>>>> vm_exit_during_initialization("Failed to start tracing
>>> > >>>>>>> backend.");
>>> > >>>>>>> }
>>> > >>>>>>> ---------------
>>> > >>>>>>>
>>> > >>>>>>>
>>> > >>>>>>>> If it wants to name its native threads then it is free
to do so,
>>> > >>>>>>>
>>> > >>>>>>> Currently, JVM_SetNativeThreadName() cannot change native
>>> thread name
>>> > >>>>>>> when the caller thread is JNI-attached thread.
>>> > >>>>>>> However, I think that it should be changed if Java developer
>>> calls
>>> > >>>>>>> Thread#setName() explicitly.
>>> > >>>>>>> It is not the same of changing native thread name at
>>> > >>>>>>> Threads::create_vm().
>>> > >>>>>>>
>>> > >>>>>>> If it is allowed, I want to fix SetNativeThreadName() as
below.
>>> > >>>>>>> What do you think about this?
>>> > >>>>>>
>>> > >>>>>> The decision to not change the name of JNI-attached
threads was a
>>> > >>>>>> deliberate one** - this functionality originated with the OSX
>>> port and
>>> > >>>>>> it was reported that the initial feedback with this
feature was to
>>> > >>>>>> ensure it didn't mess with thread names that had been set by
>>> the host
>>> > >>>>>> process. If we do as you propose then we will just have an
>>> > >>>>>> inconsistency for people to complain about: "why does my
>>> native thread
>>> > >>>>>> only have a name if I call cur.setName(cur.getName()) ?"
>>> > >>>>>>
>>> > >>>>>> ** If you follow the bugs and related discussions on
this, the
>>> > >>>>>> semantics and limitations (truncation, current thread only,
>>> non-JNI
>>> > >>>>>> threads only) of setting the native thread name were supposed
>>> to be
>>> > >>>>>> documented in the release notes - but as far as I can see
that
>>> never
>>> > >>>>>> happened. :(
>>> > >>>>>>
>>> > >>>>>> My position on this remains that if it is desirable for
the main
>>> > >>>>>> thread (and DestroyJavaVM thread) to have native names
then the
>>> > >>>>>> launcher needs to be setting them using the available
platform
>>> APIs.
>>> > >>>>>> Unfortunately this is complicated - as evidenced by the VM
>>> code for
>>> > >>>>>> this - due to the need to verify API availability.
>>> > >>>>>>
>>> > >>>>>> Any change in behaviour in relation to Thread.setName would
>>> have to go
>>> > >>>>>> through our CCC process I think. But a change in the launcher
>>> would
>>> > >>>>>> not.
>>> > >>>>>>
>>> > >>>>>> Sorry.
>>> > >>>>>>
>>> > >>>>>> David
>>> > >>>>>> -----
>>> > >>>>>>
>>> > >>>>>>> ---------------
>>> > >>>>>>> --- a/src/share/vm/prims/jvm.cpp Thu Apr 14 13:31:11
>>> 2016 +0200
>>> > >>>>>>> +++ b/src/share/vm/prims/jvm.cpp Fri Apr 15 17:50:10
>>> 2016 +0900
>>> > >>>>>>> @@ -3187,7 +3187,7 @@
>>> > >>>>>>> JavaThread* thr = java_lang_Thread::thread(java_thread);
>>> > >>>>>>> // Thread naming only supported for the current thread,
>>> doesn't
>>> > >>>>>>> work
>>> > >>>>>>> for
>>> > >>>>>>> // target threads.
>>> > >>>>>>> - if (Thread::current() == thr &&
>>> !thr->has_attached_via_jni()) {
>>> > >>>>>>> + if (Thread::current() == thr) {
>>> > >>>>>>> // we don't set the name of an attached thread to avoid
>>> stepping
>>> > >>>>>>> // on other programs
>>> > >>>>>>> const char *thread_name =
>>> > >>>>>>>
>>> java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(name));
>>> > >>>>>>> ---------------
>>> > >>>>>>>
>>> > >>>>>>>
>>> > >>>>>>> Thanks,
>>> > >>>>>>>
>>> > >>>>>>> Yasumasa
>>> > >>>>>>>
>>> > >>>>>>>
>>> > >>>>>>> On 2016/04/15 13:32, David Holmes wrote:
>>> > >>>>>>>>
>>> > >>>>>>>>
>>> > >>>>>>>> On 15/04/2016 1:11 AM, Yasumasa Suenaga wrote:
>>> > >>>>>>>>> Roger,
>>> > >>>>>>>>> Thanks for your comment!
>>> > >>>>>>>>>
>>> > >>>>>>>>> David,
>>> > >>>>>>>>>
>>> > >>>>>>>>>>>> I'll wait to see what Kumar thinks about this. I
don't like
>>> > >>>>>>>>>>>> exposing
>>> > >>>>>>>>>>>> a new JVM function this way.
>>> > >>>>>>>>>
>>> > >>>>>>>>> I tried to call Thread#setName() after initializing VM
(before
>>> > >>>>>>>>> calling
>>> > >>>>>>>>> main method),
>>> > >>>>>>>>> I could set native thread name.
>>> > >>>>>>>>> However, DestroyJavaVM() calls AttachCurrentThread().
So we
>>> can't
>>> > >>>>>>>>> set
>>> > >>>>>>>>> native thread name for DestroyJavaVM.
>>> > >>>>>>>>
>>> > >>>>>>>> Right - I came to the same realization earlier this
morning.
>>> Which,
>>> > >>>>>>>> unfortunately, takes me back to the basic premise here that
>>> we don't
>>> > >>>>>>>> set the name of threads not created by the JVM. The fact
>>> that the
>>> > >>>>>>>> "main" thread is not tagged as being a JNI-attached
thread seems
>>> > >>>>>>>> accidental to me - so JVM_SetNativeThreadName is only
working by
>>> > >>>>>>>> accident for the initial attach, and can't be used for the
>>> > >>>>>>>> DestroyJavaVM part - which leaves the thread inconsistently
>>> named at
>>> > >>>>>>>> the native level.
>>> > >>>>>>>>
>>> > >>>>>>>> I'm afraid my view here is that the launcher has to be
>>> treated like
>>> > >>>>>>>> any other process that might host a JVM. If it wants to
name its
>>> > >>>>>>>> native threads then it is free to do so, but I would not be
>>> exporting
>>> > >>>>>>>> a function from the JVM to do that - it would have to
use the OS
>>> > >>>>>>>> specific API's for that on a platform-by-platform basis.
>>> > >>>>>>>>
>>> > >>>>>>>> Sorry.
>>> > >>>>>>>>
>>> > >>>>>>>> David
>>> > >>>>>>>> -----
>>> > >>>>>>>>
>>> > >>>>>>>>
>>> > >>>>>>>>>
>>> > >>>>>>>>>
>>> > >>>>>>>>> Thanks,
>>> > >>>>>>>>>
>>> > >>>>>>>>> Yasumasa
>>> > >>>>>>>>>
>>> > >>>>>>>>>
>>> > >>>>>>>>> On 2016/04/14 23:24, Roger Riggs wrote:
>>> > >>>>>>>>>> Hi,
>>> > >>>>>>>>>>
>>> > >>>>>>>>>> Comments:
>>> > >>>>>>>>>>
>>> > >>>>>>>>>> jvm.h: The function names are too similar but perform
>>> different
>>> > >>>>>>>>>> functions:
>>> > >>>>>>>>>>
>>> > >>>>>>>>>> -JVM_SetNativeThreadName0 vs JVM_SetNativeThreadName
>>> > >>>>>>>>>>
>>> > >>>>>>>>>> - The first function applies to the current thread, the
>>> second
>>> > >>>>>>>>>> one a
>>> > >>>>>>>>>> specific java thread.
>>> > >>>>>>>>>> It would seem useful for there to be a comment somewhere
>>> about
>>> > >>>>>>>>>> what
>>> > >>>>>>>>>> the new function does.
>>> > >>>>>>>>>>
>>> > >>>>>>>>>> windows/native/libjli/java_md.c: line 408 casts to
(void*)
>>> > >>>>>>>>>> instead of
>>> > >>>>>>>>>> (SetNativeThreadName0_t)
>>> > >>>>>>>>>> as is done on unix and mac.
>>> > >>>>>>>>>>
>>> > >>>>>>>>>> - macosx/native/libjli/java_md_macosx.c:
>>> > >>>>>>>>>> - 737: looks wrong to overwriteifn->GetCreatedJavaVMs
>>> used at
>>> > >>>>>>>>>> line 730
>>> > >>>>>>>>>> - 738 Incorrect indentation; if possible keep the cast
>>> on the
>>> > >>>>>>>>>> same
>>> > >>>>>>>>>> line as dlsym...
>>> > >>>>>>>>>>
>>> > >>>>>>>>>> $.02, Roger
>>> > >>>>>>>>>>
>>> > >>>>>>>>>>
>>> > >>>>>>>>>> On 4/14/2016 9:32 AM, Yasumasa Suenaga wrote:
>>> > >>>>>>>>>>>> That is an interesting question which I haven't had
time to
>>> > >>>>>>>>>>>> check -
>>> > >>>>>>>>>>>> sorry. If the main thread is considered a JNI-attached
>>> thread
>>> > >>>>>>>>>>>> then
>>> > >>>>>>>>>>>> my suggestion wont work. If it isn't then my suggestion
>>> should
>>> > >>>>>>>>>>>> work
>>> > >>>>>>>>>>>> (but it means we have an inconsistency in our
treatment of
>>> > >>>>>>>>>>>> JNI-attached threads :( )
>>> > >>>>>>>>>>>
>>> > >>>>>>>>>>> I ran following program on JDK 9 EA b112, and I
confirmed
>>> native
>>> > >>>>>>>>>>> thread name (test) was set.
>>> > >>>>>>>>>>> ---------
>>> > >>>>>>>>>>> public class Sleep{
>>> > >>>>>>>>>>> public static void main(String[] args) throws
Exception{
>>> > >>>>>>>>>>> Thread.currentThread().setName("test");
>>> > >>>>>>>>>>> Thread.sleep(3600000);
>>> > >>>>>>>>>>> }
>>> > >>>>>>>>>>> }
>>> > >>>>>>>>>>> ---------
>>> > >>>>>>>>>>>
>>> > >>>>>>>>>>>
>>> > >>>>>>>>>>>> I'll wait to see what Kumar thinks about this. I
don't like
>>> > >>>>>>>>>>>> exposing
>>> > >>>>>>>>>>>> a new JVM function this way.
>>> > >>>>>>>>>>>
>>> > >>>>>>>>>>> I will update webrev after hearing Kumar's comment.
>>> > >>>>>>>>>>>
>>> > >>>>>>>>>>>
>>> > >>>>>>>>>>> Thanks,
>>> > >>>>>>>>>>>
>>> > >>>>>>>>>>> Yasumasa
>>> > >>>>>>>>>>>
>>> > >>>>>>>>>>>
>>> > >>>>>>>>>>> On 2016/04/14 21:32, David Holmes wrote:
>>> > >>>>>>>>>>>> On 14/04/2016 1:52 PM, Yasumasa Suenaga wrote:
>>> > >>>>>>>>>>>>> Hi,
>>> > >>>>>>>>>>>>>
>>> > >>>>>>>>>>>>> On 2016/04/14 9:34, David Holmes wrote:
>>> > >>>>>>>>>>>>>> Hi,
>>> > >>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>> On 14/04/2016 1:28 AM, Yasumasa Suenaga wrote:
>>> > >>>>>>>>>>>>>>> Hi David,
>>> > >>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>> Thanks for your comment.
>>> > >>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>> I exported new JVM function to set native thread
>>> name, and JLI
>>> > >>>>>>>>>>>>>>> uses it
>>> > >>>>>>>>>>>>>>> in new webrev.
>>> > >>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>> First the launcher belongs to another team so
>>> core-libs will
>>> > >>>>>>>>>>>>>> need to
>>> > >>>>>>>>>>>>>> review and approve this (in particular Kumar) -
now cc'd.
>>> > >>>>>>>>>>>>>
>>> > >>>>>>>>>>>>> Thanks!
>>> > >>>>>>>>>>>>> I'm waiting to review :-)
>>> > >>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>> Personally I would have used a Java upcall to
>>> Thread.setName
>>> > >>>>>>>>>>>>>> rather
>>> > >>>>>>>>>>>>>> than exporting JVM_SetNativeThreadName. No
hotspot changes
>>> > >>>>>>>>>>>>>> needed in
>>> > >>>>>>>>>>>>>> that case.
>>> > >>>>>>>>>>>>>
>>> > >>>>>>>>>>>>> As I wrote [1] in JBS, I changed to use
Thread#setName() in
>>> > >>>>>>>>>>>>> Thread#init(),
>>> > >>>>>>>>>>>>> but I could not change native thread name.
>>> > >>>>>>>>>>>>
>>> > >>>>>>>>>>>> At Thread.init time the thread is not alive, which is
>>> why the
>>> > >>>>>>>>>>>> native
>>> > >>>>>>>>>>>> name is not set.
>>> > >>>>>>>>>>>>
>>> > >>>>>>>>>>>>> I guess that caller of main() is JNI attached thread.
>>> > >>>>>>>>>>>>
>>> > >>>>>>>>>>>> That is an interesting question which I haven't had
time to
>>> > >>>>>>>>>>>> check -
>>> > >>>>>>>>>>>> sorry. If the main thread is considered a JNI-attached
>>> thread
>>> > >>>>>>>>>>>> then
>>> > >>>>>>>>>>>> my suggestion wont work. If it isn't then my suggestion
>>> should
>>> > >>>>>>>>>>>> work
>>> > >>>>>>>>>>>> (but it means we have an inconsistency in our
treatment of
>>> > >>>>>>>>>>>> JNI-attached threads :( )
>>> > >>>>>>>>>>>>
>>> > >>>>>>>>>>>> I'll wait to see what Kumar thinks about this. I
don't like
>>> > >>>>>>>>>>>> exposing
>>> > >>>>>>>>>>>> a new JVM function this way.
>>> > >>>>>>>>>>>>
>>> > >>>>>>>>>>>> Thanks,
>>> > >>>>>>>>>>>> David
>>> > >>>>>>>>>>>> -----
>>> > >>>>>>>>>>>>
>>> > >>>>>>>>>>>>> Thus I think that we have to provide a function to set
>>> native
>>> > >>>>>>>>>>>>> thread name.
>>> > >>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>
>>> > >>>>>>>>>>>>> Thanks,
>>> > >>>>>>>>>>>>>
>>> > >>>>>>>>>>>>> Yasumasa
>>> > >>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>
>>> > >>>>>>>>>>>>> [1]
>>> > >>>>>>>>>>>>>
>>>
https://bugs.openjdk.java.net/browse/JDK-8152690?focusedCommentId=13926851&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13926851
>>> > >>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>> Thanks,
>>> > >>>>>>>>>>>>>> David
>>> > >>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>> Could you review again?
>>> > >>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>> - hotspot:
>>> > >>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>
>>> http://cr.openjdk.java.net/~ysuenaga/JDK-8152690/webrev.02/hotspot/
>>> > >>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>> - jdk:
>>> > >>>>>>>>>>>>>>>
>>> http://cr.openjdk.java.net/~ysuenaga/JDK-8152690/webrev.02/jdk/
>>> > >>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>> Thanks,
>>> > >>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>> Yasumasa
>>> > >>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>> On 2016/04/13 22:00, David Holmes wrote:
>>> > >>>>>>>>>>>>>>>> I'll answer on this original thread as well ...
>>> > >>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>> Hi Yasumasa,
>>> > >>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>> Please see my updates to the bug (sorry have
been on
>>> > >>>>>>>>>>>>>>>> vacation).
>>> > >>>>>>>>>>>>>>>> This
>>> > >>>>>>>>>>>>>>>> needs to be done in the launcher to be correct
as we
>>> do not
>>> > >>>>>>>>>>>>>>>> set the
>>> > >>>>>>>>>>>>>>>> name of threads that attach via JNI, which
includes the
>>> > >>>>>>>>>>>>>>>> "main"
>>> > >>>>>>>>>>>>>>>> thread.
>>> > >>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>> David
>>> > >>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>> On 31/03/2016 9:49 AM, Yasumasa Suenaga wrote:
>>> > >>>>>>>>>>>>>>>>> Thanks Robbin,
>>> > >>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>> I'm waiting a sponsor and more reviewer :-)
>>> > >>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>> Yasumasa
>>> > >>>>>>>>>>>>>>>>> 2016/03/31 5:58 "Robbin Ehn"
<robbin....@oracle.com <mailto:robbin....@oracle.com>
>>> <mailto:robbin....@oracle.com <mailto:robbin....@oracle.com>>>:
>>> > >>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>> FYI: I'm not a Reviewer.
>>> > >>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>> /Robbin
>>> > >>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>> On 03/30/2016 10:55 PM, Robbin Ehn wrote:
>>> > >>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>> Thanks, looks good.
>>> > >>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>> /Robbin
>>> > >>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>> On 03/30/2016 03:47 PM, Yasumasa Suenaga wrote:
>>> > >>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>> Hi,
>>> > >>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>> I uploaded new webrev.
>>> > >>>>>>>>>>>>>>>>>>>> Could you review it?
>>> > >>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>
>>> http://cr.openjdk.java.net/~ysuenaga/JDK-8152690/webrev.01/
>>> > >>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>> Thanks,
>>> > >>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>> Yasumasa
>>> > >>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>> On 2016/03/30 19:10, Robbin Ehn wrote:
>>> > >>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>> Hi,
>>> > >>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>> On 03/30/2016 11:41 AM, Yasumasa Suenaga
wrote:
>>> > >>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>> Hi Robbin,
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>> 2016/03/30 18:22 "Robbin Ehn"
>>> <robbin....@oracle.com <mailto:robbin....@oracle.com>
<mailto:robbin....@oracle.com <mailto:robbin....@oracle.com>>
>>> > >>>>>>>>>>>>>>>>>>>>>> <mailto:robbin....@oracle.com
<mailto:robbin....@oracle.com>
>>> <mailto:robbin....@oracle.com <mailto:robbin....@oracle.com>>>>:
>>> > >>>>>>>>>>>>>>>>>>>>>> >
>>> > >>>>>>>>>>>>>>>>>>>>>> > Hi Yasumasa,
>>> > >>>>>>>>>>>>>>>>>>>>>> >
>>> > >>>>>>>>>>>>>>>>>>>>>> >
>>> > >>>>>>>>>>>>>>>>>>>>>> > On 03/25/2016 12:48 AM, Yasumasa
Suenaga wrote:
>>> > >>>>>>>>>>>>>>>>>>>>>> >>
>>> > >>>>>>>>>>>>>>>>>>>>>> >> Hi Robbin,
>>> > >>>>>>>>>>>>>>>>>>>>>> >> 2016/03/25 1:51 "Robbin Ehn"
>>> > >>>>>>>>>>>>>>>>>>>>>> <robbin....@oracle.com
<mailto:robbin....@oracle.com>
>>> <mailto:robbin....@oracle.com <mailto:robbin....@oracle.com>>
>>> > >>>>>>>>>>>>>>>>>>>>>> <mailto:robbin....@oracle.com
<mailto:robbin....@oracle.com>
>>> <mailto:robbin....@oracle.com <mailto:robbin....@oracle.com>>>
>>> > >>>>>>>>>>>>>>>>>>>>>> >> <mailto:robbin....@oracle.com
<mailto:robbin....@oracle.com>
>>> <mailto:robbin....@oracle.com <mailto:robbin....@oracle.com>>
>>> > >>>>>>>>>>>>>>>>>>>>>> <mailto:robbin....@oracle.com
<mailto:robbin....@oracle.com>
>>> <mailto:robbin....@oracle.com <mailto:robbin....@oracle.com>>>>>:
>>> > >>>>>>>>>>>>>>>>>>>>>> >>
>>> > >>>>>>>>>>>>>>>>>>>>>> >> >
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > Hi Yasumasa,
>>> > >>>>>>>>>>>>>>>>>>>>>> >> >
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > I'm not sure why you don't set it:
>>> > >>>>>>>>>>>>>>>>>>>>>> >> >
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > diff -r ded6ef79c770
>>> > >>>>>>>>>>>>>>>>>>>>>> src/share/vm/runtime/thread.cpp
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > ---
a/src/share/vm/runtime/thread.cpp Thu
>>> > >>>>>>>>>>>>>>>>>>>>>> Mar 24
>>> > >>>>>>>>>>>>>>>>>>>>>> 13:09:16 2016
>>> > >>>>>>>>>>>>>>>>>>>>>> +0000
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > +++
b/src/share/vm/runtime/thread.cpp Thu
>>> > >>>>>>>>>>>>>>>>>>>>>> Mar 24
>>> > >>>>>>>>>>>>>>>>>>>>>> 17:40:09 2016
>>> > >>>>>>>>>>>>>>>>>>>>>> +0100
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > @@ -3584,6 +3584,7 @@
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > JavaThread* main_thread = new
>>> JavaThread();
>>> > >>>>>>>>>>>>>>>>>>>>>> >> >
>>> main_thread->set_thread_state(_thread_in_vm);
>>> > >>>>>>>>>>>>>>>>>>>>>> >> >
main_thread->initialize_thread_current();
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > +
>>> main_thread->set_native_thread_name("main");
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > // must do this before
>>> set_active_handles
>>> > >>>>>>>>>>>>>>>>>>>>>> >> >
main_thread->record_stack_base_and_size();
>>> > >>>>>>>>>>>>>>>>>>>>>> >> >
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> main_thread->set_active_handles(JNIHandleBlock::allocate_block());
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>> >> >
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > here instead? Am I missing something?
>>> > >>>>>>>>>>>>>>>>>>>>>> >>
>>> > >>>>>>>>>>>>>>>>>>>>>> >> Native thread name is the same to thread
>>> name in
>>> > >>>>>>>>>>>>>>>>>>>>>> Thread
>>> > >>>>>>>>>>>>>>>>>>>>>> class.
>>> > >>>>>>>>>>>>>>>>>>>>>> >> It is set in c'tor in Thread or
setName().
>>> > >>>>>>>>>>>>>>>>>>>>>> >> If you create new thread in Java app,
native
>>> > >>>>>>>>>>>>>>>>>>>>>> thread
>>> > >>>>>>>>>>>>>>>>>>>>>> name
>>> > >>>>>>>>>>>>>>>>>>>>>> will be
>>> > >>>>>>>>>>>>>>>>>>>>>> set at
>>> > >>>>>>>>>>>>>>>>>>>>>> >> startup. However, main thread is already
>>> starte
>>> > >>>>>>>>>>>>>>>>>>>>>> in VM.
>>> > >>>>>>>>>>>>>>>>>>>>>> >> Thread name for "main" is set in
>>> > >>>>>>>>>>>>>>>>>>>>>> create_initial_thread().
>>> > >>>>>>>>>>>>>>>>>>>>>> >> I think that the place of setting
thrrad name
>>> > >>>>>>>>>>>>>>>>>>>>>> should
>>> > >>>>>>>>>>>>>>>>>>>>>> be the
>>> > >>>>>>>>>>>>>>>>>>>>>> same.
>>> > >>>>>>>>>>>>>>>>>>>>>> >
>>> > >>>>>>>>>>>>>>>>>>>>>> >
>>> > >>>>>>>>>>>>>>>>>>>>>> > Yes, I see your point. But then
something like
>>> > >>>>>>>>>>>>>>>>>>>>>> this is
>>> > >>>>>>>>>>>>>>>>>>>>>> nicer, no?
>>> > >>>>>>>>>>>>>>>>>>>>>> >
>>> > >>>>>>>>>>>>>>>>>>>>>> > --- a/src/share/vm/runtime/thread.cpp
Tue
>>> Mar 29
>>> > >>>>>>>>>>>>>>>>>>>>>> 09:43:05
>>> > >>>>>>>>>>>>>>>>>>>>>> 2016
>>> > >>>>>>>>>>>>>>>>>>>>>> +0200
>>> > >>>>>>>>>>>>>>>>>>>>>> > +++ b/src/share/vm/runtime/thread.cpp
Wed
>>> Mar 30
>>> > >>>>>>>>>>>>>>>>>>>>>> 10:51:12
>>> > >>>>>>>>>>>>>>>>>>>>>> 2016
>>> > >>>>>>>>>>>>>>>>>>>>>> +0200
>>> > >>>>>>>>>>>>>>>>>>>>>> > @@ -981,6 +981,7 @@
>>> > >>>>>>>>>>>>>>>>>>>>>> > // Creates the initial Thread
>>> > >>>>>>>>>>>>>>>>>>>>>> > static oop create_initial_thread(Handle
>>> > >>>>>>>>>>>>>>>>>>>>>> thread_group,
>>> > >>>>>>>>>>>>>>>>>>>>>> JavaThread*
>>> > >>>>>>>>>>>>>>>>>>>>>> thread,
>>> > >>>>>>>>>>>>>>>>>>>>>> > TRAPS) {
>>> > >>>>>>>>>>>>>>>>>>>>>> > + static const char*
initial_thread_name =
>>> "main";
>>> > >>>>>>>>>>>>>>>>>>>>>> > Klass* k =
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(),
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>> true,
>>> > >>>>>>>>>>>>>>>>>>>>>> CHECK_NULL);
>>> > >>>>>>>>>>>>>>>>>>>>>> > instanceKlassHandle klass (THREAD, k);
>>> > >>>>>>>>>>>>>>>>>>>>>> > instanceHandle thread_oop =
>>> > >>>>>>>>>>>>>>>>>>>>>> klass->allocate_instance_handle(CHECK_NULL);
>>> > >>>>>>>>>>>>>>>>>>>>>> > @@ -988,8 +989,10 @@
>>> > >>>>>>>>>>>>>>>>>>>>>> > java_lang_Thread::set_thread(thread_oop(),
>>> thread);
>>> > >>>>>>>>>>>>>>>>>>>>>> >
java_lang_Thread::set_priority(thread_oop(),
>>> > >>>>>>>>>>>>>>>>>>>>>> NormPriority);
>>> > >>>>>>>>>>>>>>>>>>>>>> > thread->set_threadObj(thread_oop());
>>> > >>>>>>>>>>>>>>>>>>>>>> > -
>>> > >>>>>>>>>>>>>>>>>>>>>> > - Handle string =
>>> > >>>>>>>>>>>>>>>>>>>>>> java_lang_String::create_from_str("main",
>>> > >>>>>>>>>>>>>>>>>>>>>> CHECK_NULL);
>>> > >>>>>>>>>>>>>>>>>>>>>> > +
>>> > >>>>>>>>>>>>>>>>>>>>>> > +
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> thread->set_native_thread_name(initial_thread_name);
>>> > >>>>>>>>>>>>>>>>>>>>>> > +
>>> > >>>>>>>>>>>>>>>>>>>>>> > + Handle string =
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> java_lang_String::create_from_str(initial_thread_name,
>>> > >>>>>>>>>>>>>>>>>>>>>> CHECK_NULL);
>>> > >>>>>>>>>>>>>>>>>>>>>> >
>>> > >>>>>>>>>>>>>>>>>>>>>> > JavaValue result(T_VOID);
>>> > >>>>>>>>>>>>>>>>>>>>>> > JavaCalls::call_special(&result,
thread_oop,
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>> Okay, I will upload new webrev later.
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>> Thanks!
>>> > >>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > The launcher seem to name itself
'java' and
>>> > >>>>>>>>>>>>>>>>>>>>>> naming
>>> > >>>>>>>>>>>>>>>>>>>>>> this
>>> > >>>>>>>>>>>>>>>>>>>>>> thread
>>> > >>>>>>>>>>>>>>>>>>>>>> just
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > 'main' is confusing to me.
>>> > >>>>>>>>>>>>>>>>>>>>>> >> >
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > E.g. so main thread of the process
(and
>>> thus
>>> > >>>>>>>>>>>>>>>>>>>>>> the
>>> > >>>>>>>>>>>>>>>>>>>>>> process) is
>>> > >>>>>>>>>>>>>>>>>>>>>> 'java' but
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > first JavaThread is 'main'.
>>> > >>>>>>>>>>>>>>>>>>>>>> >>
>>> > >>>>>>>>>>>>>>>>>>>>>> >> The native main thread in the process
is not
>>> > >>>>>>>>>>>>>>>>>>>>>> JavaThread.
>>> > >>>>>>>>>>>>>>>>>>>>>> It is
>>> > >>>>>>>>>>>>>>>>>>>>>> waiting
>>> > >>>>>>>>>>>>>>>>>>>>>> >> for ending of Java main thread with
>>> > >>>>>>>>>>>>>>>>>>>>>> pthread_join().
>>> > >>>>>>>>>>>>>>>>>>>>>> >> set_native_thread_name() is for
>>> JavaThread. So I
>>> > >>>>>>>>>>>>>>>>>>>>>> think that
>>> > >>>>>>>>>>>>>>>>>>>>>> we do
>>> > >>>>>>>>>>>>>>>>>>>>>> not
>>> > >>>>>>>>>>>>>>>>>>>>>> >> need to call it for native main thread.
>>> > >>>>>>>>>>>>>>>>>>>>>> >
>>> > >>>>>>>>>>>>>>>>>>>>>> >
>>> > >>>>>>>>>>>>>>>>>>>>>> > Not sure if we can change it anyhow, since
>>> we want
>>> > >>>>>>>>>>>>>>>>>>>>>> java and
>>> > >>>>>>>>>>>>>>>>>>>>>> native
>>> > >>>>>>>>>>>>>>>>>>>>>> name to be the same and java thread name
might
>>> have
>>> > >>>>>>>>>>>>>>>>>>>>>> some
>>> > >>>>>>>>>>>>>>>>>>>>>> dependents.
>>> > >>>>>>>>>>>>>>>>>>>>>> >
>>> > >>>>>>>>>>>>>>>>>>>>>> > The name is visible in e.g. /proc.
>>> > >>>>>>>>>>>>>>>>>>>>>> >
>>> > >>>>>>>>>>>>>>>>>>>>>> > $ ps H -C java -o 'pid tid comm' | head -4
>>> > >>>>>>>>>>>>>>>>>>>>>> > PID TID COMMAND
>>> > >>>>>>>>>>>>>>>>>>>>>> > 6423 6423 java
>>> > >>>>>>>>>>>>>>>>>>>>>> > 6423 6424 main
>>> > >>>>>>>>>>>>>>>>>>>>>> > 6423 6425 GC Thread#0
>>> > >>>>>>>>>>>>>>>>>>>>>> >
>>> > >>>>>>>>>>>>>>>>>>>>>> > It would be nice with something like
'Java Main
>>> > >>>>>>>>>>>>>>>>>>>>>> Thread'.
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>> I do not think so.
>>> > >>>>>>>>>>>>>>>>>>>>>> Native main thread might not be a Java
>>> launcher - e.g.
>>> > >>>>>>>>>>>>>>>>>>>>>> Apache
>>> > >>>>>>>>>>>>>>>>>>>>>> commons-daemon, JNI application, etc.
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>> If you want to change native main thread
name,
>>> I think
>>> > >>>>>>>>>>>>>>>>>>>>>> that we
>>> > >>>>>>>>>>>>>>>>>>>>>> have to
>>> > >>>>>>>>>>>>>>>>>>>>>> change Java launcher code.
>>> > >>>>>>>>>>>>>>>>>>>>>> Should I include it in new webrev?
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>> No
>>> > >>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>> Thanks again!
>>> > >>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>> /Robbin
>>> > >>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>> Thanks,
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>> Yasumasa
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>> > Thanks
>>> > >>>>>>>>>>>>>>>>>>>>>> >
>>> > >>>>>>>>>>>>>>>>>>>>>> > /Robbin
>>> > >>>>>>>>>>>>>>>>>>>>>> >
>>> > >>>>>>>>>>>>>>>>>>>>>> >
>>> > >>>>>>>>>>>>>>>>>>>>>> >>
>>> > >>>>>>>>>>>>>>>>>>>>>> >> Thanks,
>>> > >>>>>>>>>>>>>>>>>>>>>> >>
>>> > >>>>>>>>>>>>>>>>>>>>>> >> Yasumasa
>>> > >>>>>>>>>>>>>>>>>>>>>> >>
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > Thanks!
>>> > >>>>>>>>>>>>>>>>>>>>>> >> >
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > /Robbin
>>> > >>>>>>>>>>>>>>>>>>>>>> >> >
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > On 03/24/2016 03:26 PM, Yasumasa
>>> Suenaga wrote:
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > > Hi all,
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > >
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > > HotSpot for Linux will set thread
>>> name via
>>> > >>>>>>>>>>>>>>>>>>>>>> pthread_setname_np().
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > > However, main thread does not
have it.
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > >
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > > All JavaThread have native name,
and main
>>> > >>>>>>>>>>>>>>>>>>>>>> thread is
>>> > >>>>>>>>>>>>>>>>>>>>>> JavaThread.
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > > For consistency, main thread
should have
>>> > >>>>>>>>>>>>>>>>>>>>>> native
>>> > >>>>>>>>>>>>>>>>>>>>>> thread
>>> > >>>>>>>>>>>>>>>>>>>>>> name.
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > >
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > > I uploaded a webrev. Could you
review it?
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > >
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > >
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> http://cr.openjdk.java.net/~ysuenaga/JDK-8152690/webrev.00/
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > >
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > > I cannot access JPRT.
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > > So I need a sponsor.
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > >
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > >
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > > Thanks,
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > >
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > > Yasumasa
>>> > >>>>>>>>>>>>>>>>>>>>>> >> > >
>>> > >>>>>>>>>>>>>>>>>>>>>> >>
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>>>>>>>>>>>>>
>>> > >>>>>>>>>>
>>> >
>>>