RFR: JDK-8152690: main thread does not have native thread name
David Holmes
david.holmes at oracle.com
Thu Apr 14 00:34:23 UTC 2016
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.
Personally I would have used a Java upcall to Thread.setName rather than
exporting JVM_SetNativeThreadName. No hotspot changes needed in that case.
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.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 core-libs-dev
mailing list