RFR: JDK-8152690: main thread does not have native thread name
Yasumasa Suenaga
yasuenag at gmail.com
Thu Apr 14 03:52:03 UTC 2016
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.
I guess that caller of main() is JNI attached thread.
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.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