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.hol...@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 > >