SA side fix for 8150689

David Holmes david.holmes at oracle.com
Fri Nov 30 01:37:43 UTC 2018


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