--- a/src/hotspot/share/prims/jvmtiEnvBase.cpp Thu Oct 17 20:27:44 2019 +0100
+++ b/src/hotspot/share/prims/jvmtiEnvBase.cpp Thu Oct 17 20:53:35 2019 +0100
@@ -659,10 +659,9 @@
// thread is not doing an Object.wait() call
mon = java_thread->current_pending_monitor();
if (mon != NULL) {
- // The thread is trying to enter() or raw_enter() an ObjectMonitor.
+ // The thread is trying to enter() an ObjectMonitor.
obj = (oop)mon->object();
- // If obj == NULL, then ObjectMonitor is raw which doesn't count
- // as contended for this API
+ assert(obj != NULL, "ObjectMonitor should have a valid object!");
}
// implied else: no contended ObjectMonitor
} else {
@@ -960,23 +959,23 @@
if (at_safepoint) {
BiasedLocking::revoke_at_safepoint(hobj);
} else {
- BiasedLocking::revoke_and_rebias(hobj, false, calling_thread);
+ BiasedLocking::revoke(hobj, calling_thread);
}
address owner = NULL;
{
- markOop mark = hobj()->mark();
+ markWord mark = hobj()->mark();
- if (!mark->has_monitor()) {
+ if (!mark.has_monitor()) {
// this object has a lightweight monitor
- if (mark->has_locker()) {
- owner = (address)mark->locker(); // save the address of the Lock word
+ if (mark.has_locker()) {
+ owner = (address)mark.locker(); // save the address of the Lock word
}
// implied else: no owner
} else {
// this object has a heavyweight monitor
- mon = mark->monitor();
+ mon = mark.monitor();
// The owner field of a heavyweight monitor may be NULL for no
// owner, a JavaThread * or it may still be the address of the
@@ -1083,7 +1082,7 @@
// If the monitor has no owner, then a non-suspended contending
// thread could potentially change the state of the monitor by
// entering it. The JVM/TI spec doesn't allow this.
- if (owning_thread == NULL && !at_safepoint &
+ if (owning_thread == NULL && !at_safepoint &&
!pending_thread->is_thread_fully_suspended(true, &debug_bits)) {
if (ret.owner != NULL) {
destroy_jni_reference(calling_thread, ret.owner);