[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-serviceability-dev
Subject:    Re: SA side fix for 8150689
From:       David Holmes <david.holmes () oracle ! com>
Date:       2018-11-30 1:37:43
Message-ID: 3cc73cc7-7130-941f-b4f4-5456c1d36c2f () oracle ! com
[Download RAW message or body]

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
> 
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic