Hi Yasumasa,
On 30/11/2018 1:39 pm, 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?
As per the main bug you should delete this part of the comment block:
102 // At this level we can't distinguish the two cases to report
103 // "waited on" rather than "waiting on" for the second case.
Otherwise looks fine. No need to see an updated webrev.
Thanks,
David
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