RFR: JDK-8152690: main thread does not have native thread name
Yasumasa Suenaga
yasuenag at gmail.com
Wed Apr 13 15:28:54 UTC 2016
Hi David,
Thanks for your comment.
I exported new JVM function to set native thread name, and JLI uses it in new webrev.
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.ehn at 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.ehn at oracle.com
>>>>>>> <mailto:robbin.ehn at oracle.com>>:
>>>>>>> >
>>>>>>> > Hi Yasumasa,
>>>>>>> >
>>>>>>> >
>>>>>>> > On 03/25/2016 12:48 AM, Yasumasa Suenaga wrote:
>>>>>>> >>
>>>>>>> >> Hi Robbin,
>>>>>>> >> 2016/03/25 1:51 "Robbin Ehn" <robbin.ehn at oracle.com
>>>>>>> <mailto:robbin.ehn at oracle.com>
>>>>>>> >> <mailto:robbin.ehn at oracle.com <mailto:robbin.ehn at 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
>>>>>>> >> > >
>>>>>>> >>
>>>>>>>
>>>>>>>
More information about the hotspot-runtime-dev
mailing list