--- old/src/hotspot/share/runtime/biasedLocking.cpp 2019-08-27 14:06:31.871557648 +0200 +++ new/src/hotspot/share/runtime/biasedLocking.cpp 2019-08-27 14:06:31.576547429 +0200 @@ -726,6 +726,27 @@ assert(!obj->mark().has_bias_pattern(), "must not be biased"); } +void BiasedLocking::revoke_own_locks(Handle obj, TRAPS) { + markWord mark = obj->mark(); + + if (!mark.has_bias_pattern()) { + return; + } + + Klass *k = obj->klass(); + markWord prototype_header = k->prototype_header(); + assert(mark.biased_locker() == THREAD && + prototype_header.bias_epoch() == mark.bias_epoch(), "Revoke failed, unhandled biased lock state"); + ResourceMark rm; + log_info(biasedlocking)("Revoking bias by walking my own stack:"); + EventBiasedLockSelfRevocation event; + BiasedLocking::walk_stack_and_revoke(obj(), (JavaThread*) THREAD); + ((JavaThread*) THREAD)->set_cached_monitor_info(NULL); + assert(!obj->mark().has_bias_pattern(), "invariant"); + if (event.should_commit()) { + post_self_revocation_event(&event, k); + } +} void BiasedLocking::revoke(Handle obj, TRAPS) { assert(!SafepointSynchronize::is_at_safepoint(), "must not be called while at safepoint");