RFR: JDK-8152690: main thread does not have native thread name
Roger Riggs
Roger.Riggs at Oracle.com
Thu Apr 14 14:24:03 UTC 2016
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.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