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>:

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>>:
  >
  > 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>>>:
  >>
  >>  >
  >>  > 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
  >>  > >
  >>


Reply via email to