Skip to content
This repository was archived by the owner on Aug 27, 2022. It is now read-only.

Commit 89a33e6

Browse files
committed
8240918: [REDO] Allow direct handshakes without VMThread intervention
REDO of 8230594 Reviewed-by: dholmes, rehn, mdoerr, coleenp, dcubed
1 parent 51a5e9c commit 89a33e6

File tree

10 files changed

+369
-164
lines changed

10 files changed

+369
-164
lines changed

src/hotspot/share/runtime/biasedLocking.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -622,7 +622,7 @@ BiasedLocking::Condition BiasedLocking::single_revoke_with_handshake(Handle obj,
622622
p2i(biaser), p2i(obj()));
623623

624624
RevokeOneBias revoke(obj, requester, biaser);
625-
bool executed = Handshake::execute(&revoke, biaser);
625+
bool executed = Handshake::execute_direct(&revoke, biaser);
626626
if (revoke.status_code() == NOT_REVOKED) {
627627
return NOT_REVOKED;
628628
}
@@ -666,24 +666,24 @@ BiasedLocking::Condition BiasedLocking::single_revoke_with_handshake(Handle obj,
666666

667667
// Caller should have instantiated a ResourceMark object before calling this method
668668
void BiasedLocking::walk_stack_and_revoke(oop obj, JavaThread* biased_locker) {
669+
Thread* cur = Thread::current();
669670
assert(!SafepointSynchronize::is_at_safepoint(), "this should always be executed outside safepoints");
670-
assert(Thread::current() == biased_locker || Thread::current()->is_VM_thread(), "wrong thread");
671+
assert(cur == biased_locker || cur == biased_locker->active_handshaker(), "wrong thread");
671672

672673
markWord mark = obj->mark();
673674
assert(mark.biased_locker() == biased_locker &&
674675
obj->klass()->prototype_header().bias_epoch() == mark.bias_epoch(), "invariant");
675676

676-
log_trace(biasedlocking)("%s(" INTPTR_FORMAT ") revoking object " INTPTR_FORMAT ", mark "
677+
log_trace(biasedlocking)("JavaThread(" INTPTR_FORMAT ") revoking object " INTPTR_FORMAT ", mark "
677678
INTPTR_FORMAT ", type %s, prototype header " INTPTR_FORMAT
678679
", biaser " INTPTR_FORMAT " %s",
679-
Thread::current()->is_VM_thread() ? "VMThread" : "JavaThread",
680-
p2i(Thread::current()),
680+
p2i(cur),
681681
p2i(obj),
682682
mark.value(),
683683
obj->klass()->external_name(),
684684
obj->klass()->prototype_header().value(),
685685
p2i(biased_locker),
686-
Thread::current()->is_VM_thread() ? "" : "(walking own stack)");
686+
cur != biased_locker ? "" : "(walking own stack)");
687687

688688
markWord unbiased_prototype = markWord::prototype().set_age(obj->mark().age());
689689

0 commit comments

Comments
 (0)