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

Commit

Permalink
8240918: [REDO] Allow direct handshakes without VMThread intervention
Browse files Browse the repository at this point in the history
REDO of 8230594

Reviewed-by: dholmes, rehn, mdoerr, coleenp, dcubed
  • Loading branch information
pchilano committed Apr 8, 2020
1 parent 51a5e9c commit 89a33e6
Show file tree
Hide file tree
Showing 10 changed files with 369 additions and 164 deletions.
12 changes: 6 additions & 6 deletions src/hotspot/share/runtime/biasedLocking.cpp
Expand Up @@ -622,7 +622,7 @@ BiasedLocking::Condition BiasedLocking::single_revoke_with_handshake(Handle obj,
p2i(biaser), p2i(obj())); p2i(biaser), p2i(obj()));


RevokeOneBias revoke(obj, requester, biaser); RevokeOneBias revoke(obj, requester, biaser);
bool executed = Handshake::execute(&revoke, biaser); bool executed = Handshake::execute_direct(&revoke, biaser);
if (revoke.status_code() == NOT_REVOKED) { if (revoke.status_code() == NOT_REVOKED) {
return NOT_REVOKED; return NOT_REVOKED;
} }
Expand Down Expand Up @@ -666,24 +666,24 @@ BiasedLocking::Condition BiasedLocking::single_revoke_with_handshake(Handle obj,


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


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


log_trace(biasedlocking)("%s(" INTPTR_FORMAT ") revoking object " INTPTR_FORMAT ", mark " log_trace(biasedlocking)("JavaThread(" INTPTR_FORMAT ") revoking object " INTPTR_FORMAT ", mark "
INTPTR_FORMAT ", type %s, prototype header " INTPTR_FORMAT INTPTR_FORMAT ", type %s, prototype header " INTPTR_FORMAT
", biaser " INTPTR_FORMAT " %s", ", biaser " INTPTR_FORMAT " %s",
Thread::current()->is_VM_thread() ? "VMThread" : "JavaThread", p2i(cur),
p2i(Thread::current()),
p2i(obj), p2i(obj),
mark.value(), mark.value(),
obj->klass()->external_name(), obj->klass()->external_name(),
obj->klass()->prototype_header().value(), obj->klass()->prototype_header().value(),
p2i(biased_locker), p2i(biased_locker),
Thread::current()->is_VM_thread() ? "" : "(walking own stack)"); cur != biased_locker ? "" : "(walking own stack)");


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


Expand Down

0 comments on commit 89a33e6

Please sign in to comment.