RFR: 8214499: SA should follow 8150689

Jini George jini.george at oracle.com
Fri Nov 30 06:15:22 UTC 2018


The change looks good to me, Yasumasa. (One minor nit: line 110: 2 
spaces instead of 4 to align with the rest of the file).

Would the second part of this comment,

126     // Print out all monitors that we have locked, or are trying to 
lock,
127     // including re-locking after being notified or timing out in a 
wait().

continue to be valid now ? (here and in vframe.cpp) ?

Thank you,
Jini.

On 11/30/2018 9:09 AM, Yasumasa Suenaga wrote:
> Hi David, Poonam,
> 
> I filed this issue to JBS and uploaded webrev:
> 
>    JBS: https://bugs.openjdk.java.net/browse/JDK-8214499
>    webrev: http://cr.openjdk.java.net/~ysuenaga/JDK-8214499/webrev.00/
> 
> This change works fine on test/hotspot/jtreg/serviceability/sa jtreg
> test and submit repo
> (mach5-one-ysuenaga-JDK-8214499-20181130-0216-12402).
> 
> Could you review it?
> 
> 
> Thanks,
> 
> Yasumasa
> 
> 
> 2018年11月30日(金) 10:37 David Holmes <david.holmes at oracle.com>:
>>
>> Yes please file a bug Yasumasa.
>>
>> This was an oversight in the fixing of 8150689. I have to remember when
>> grepping the code that the SA source is no longer under hotspot :(
>>
>> Thanks,
>> David
>>
>> On 30/11/2018 5:29 am, Poonam Parhar wrote:
>>> Hello Yasumasa,
>>>
>>> It seems to be a good fix to have in SA. Please file a bug and send in
>>> your review request.
>>>
>>> Thanks,
>>> Poonam
>>>
>>> On 11/29/18 6:29 AM, Yasumasa Suenaga wrote:
>>>> Hi all,
>>>>
>>>> Does someone work for adapting SA to the 8150689?
>>>> 8150689 fixed not to show incorrect lock information in thread dump.
>>>>
>>>> jstack code in SA implements which refer to HotSpot implementation.
>>>> So it should be fixed as below:
>>>>
>>>> ----------------------
>>>> diff -r 157c1130b46e
>>>> src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/OopUtilities.java
>>>>
>>>> ---
>>>> a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/OopUtilities.java
>>>> Thu Nov 29 07:40:45 2018 +0800
>>>> +++
>>>> b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/OopUtilities.java
>>>> Thu Nov 29 22:52:34 2018 +0900
>>>> @@ -1,5 +1,5 @@
>>>>   /*
>>>> - * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights
>>>> reserved.
>>>> + * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights
>>>> reserved.
>>>>    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
>>>>    *
>>>>    * This code is free software; you can redistribute it and/or modify it
>>>> @@ -65,14 +65,14 @@
>>>>     // possible values of java_lang_Thread::ThreadStatus
>>>>     private static int THREAD_STATUS_NEW;
>>>>
>>>> -  private static int THREAD_STATUS_RUNNABLE;
>>>> -  private static int THREAD_STATUS_SLEEPING;
>>>> -  private static int THREAD_STATUS_IN_OBJECT_WAIT;
>>>> -  private static int THREAD_STATUS_IN_OBJECT_WAIT_TIMED;
>>>> -  private static int THREAD_STATUS_PARKED;
>>>> -  private static int THREAD_STATUS_PARKED_TIMED;
>>>> -  private static int THREAD_STATUS_BLOCKED_ON_MONITOR_ENTER;
>>>> -  private static int THREAD_STATUS_TERMINATED;
>>>> +  public static int THREAD_STATUS_RUNNABLE;
>>>> +  public static int THREAD_STATUS_SLEEPING;
>>>> +  public static int THREAD_STATUS_IN_OBJECT_WAIT;
>>>> +  public static int THREAD_STATUS_IN_OBJECT_WAIT_TIMED;
>>>> +  public static int THREAD_STATUS_PARKED;
>>>> +  public static int THREAD_STATUS_PARKED_TIMED;
>>>> +  public static int THREAD_STATUS_BLOCKED_ON_MONITOR_ENTER;
>>>> +  public static int THREAD_STATUS_TERMINATED;
>>>>
>>>>     // java.util.concurrent.locks.AbstractOwnableSynchronizer fields
>>>>     private static OopField absOwnSyncOwnerThreadField;
>>>> diff -r 157c1130b46e
>>>> src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/JavaVFrame.java
>>>>
>>>> ---
>>>> a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/JavaVFrame.java
>>>> Thu Nov 29 07:40:45 2018 +0800
>>>> +++
>>>> b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/JavaVFrame.java
>>>> Thu Nov 29 22:52:34 2018 +0900
>>>> @@ -1,5 +1,5 @@
>>>>   /*
>>>> - * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights
>>>> reserved.
>>>> + * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights
>>>> reserved.
>>>>    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
>>>>    *
>>>>    * This code is free software; you can redistribute it and/or modify it
>>>> @@ -106,6 +106,9 @@
>>>>             StackValue sv = locs.get(0);
>>>>             if (sv.getType() == BasicType.getTObject()) {
>>>>               OopHandle o = sv.getObject();
>>>> +            if
>>>> (OopUtilities.threadOopGetThreadStatus(thread.getThreadObj()) ==
>>>> OopUtilities.THREAD_STATUS_BLOCKED_ON_MONITOR_ENTER) {
>>>> +                waitState = "waiting to re-lock in wait()";
>>>> +            }
>>>>               printLockedObjectClassName(tty, o, waitState);
>>>>             }
>>>>           } else {
>>>> @@ -146,13 +149,6 @@
>>>>               // an inflated monitor that is first on the monitor list in
>>>>               // the first frame can block us on a monitor enter.
>>>>               lockState = identifyLockState(monitor, "waiting to lock");
>>>> -          } else if (frameCount != 0) {
>>>> -            // This is not the first frame so we either own this monitor
>>>> -            // or we owned the monitor before and called wait(). Because
>>>> -            // wait() could have been called on any monitor in a lower
>>>> -            // numbered frame on the stack, we have to check all the
>>>> -            // monitors on the list for this frame.
>>>> -            lockState = identifyLockState(monitor, "waiting to
>>>> re-lock in wait()");
>>>>             }
>>>>             printLockedObjectClassName(tty, monitor.owner(), lockState);
>>>>             foundFirstMonitor = true;
>>>> ----------------------
>>>>
>>>>
>>>> Please tell me if I should file it to JBS and send review request.
>>>>
>>>>
>>>> Thanks,
>>>>
>>>> Yasumasa
>>>


More information about the serviceability-dev mailing list