651 if (!prototype.has_bias_pattern() || (!tlh.includes(biaser) && biaser == mark.biased_locker() &&
652 prototype.bias_epoch() == mark.bias_epoch())) {
653 obj->cas_set_mark(markWord::prototype().set_age(mark.age()), mark);
654 if (event.should_commit()) {
655 post_revocation_event(&event, obj->klass(), &revoke);
656 }
657 assert(!obj->mark().has_bias_pattern(), "bias should be revoked by now");
658 return BIAS_REVOKED;
659 }
660 }
661 }
662
663 return NOT_REVOKED;
664 }
665
666
667 // Caller should have instantiated a ResourceMark object before calling this method
668 void BiasedLocking::walk_stack_and_revoke(oop obj, JavaThread* biased_locker) {
669 assert(!SafepointSynchronize::is_at_safepoint() || !SafepointMechanism::uses_thread_local_poll(),
670 "if SafepointMechanism::uses_thread_local_poll() is enabled this should always be executed outside safepoints");
671 assert(Thread::current() == biased_locker || Thread::current() == biased_locker->get_active_handshaker(), "wrong thread");
672
673 markWord mark = obj->mark();
674 assert(mark.biased_locker() == biased_locker &&
675 obj->klass()->prototype_header().bias_epoch() == mark.bias_epoch(), "invariant");
676
677 log_trace(biasedlocking)("%s(" INTPTR_FORMAT ") revoking object " INTPTR_FORMAT ", mark "
678 INTPTR_FORMAT ", type %s, prototype header " INTPTR_FORMAT
679 ", biaser " INTPTR_FORMAT " %s",
680 Thread::current()->is_VM_thread() ? "VMThread" : "JavaThread",
681 p2i(Thread::current()),
682 p2i(obj),
683 mark.value(),
684 obj->klass()->external_name(),
685 obj->klass()->prototype_header().value(),
686 p2i(biased_locker),
687 Thread::current()->is_VM_thread() ? "" : "(walking own stack)");
688
689 markWord unbiased_prototype = markWord::prototype().set_age(obj->mark().age());
690
691 GrowableArray<MonitorInfo*>* cached_monitor_info = get_or_compute_monitor_info(biased_locker);
|
651 if (!prototype.has_bias_pattern() || (!tlh.includes(biaser) && biaser == mark.biased_locker() &&
652 prototype.bias_epoch() == mark.bias_epoch())) {
653 obj->cas_set_mark(markWord::prototype().set_age(mark.age()), mark);
654 if (event.should_commit()) {
655 post_revocation_event(&event, obj->klass(), &revoke);
656 }
657 assert(!obj->mark().has_bias_pattern(), "bias should be revoked by now");
658 return BIAS_REVOKED;
659 }
660 }
661 }
662
663 return NOT_REVOKED;
664 }
665
666
667 // Caller should have instantiated a ResourceMark object before calling this method
668 void BiasedLocking::walk_stack_and_revoke(oop obj, JavaThread* biased_locker) {
669 assert(!SafepointSynchronize::is_at_safepoint() || !SafepointMechanism::uses_thread_local_poll(),
670 "if SafepointMechanism::uses_thread_local_poll() is enabled this should always be executed outside safepoints");
671 assert(Thread::current() == biased_locker || Thread::current() == biased_locker->get_active_handshaker() ||
672 Thread::current()->is_VM_thread(), "wrong thread");
673
674 markWord mark = obj->mark();
675 assert(mark.biased_locker() == biased_locker &&
676 obj->klass()->prototype_header().bias_epoch() == mark.bias_epoch(), "invariant");
677
678 log_trace(biasedlocking)("%s(" INTPTR_FORMAT ") revoking object " INTPTR_FORMAT ", mark "
679 INTPTR_FORMAT ", type %s, prototype header " INTPTR_FORMAT
680 ", biaser " INTPTR_FORMAT " %s",
681 Thread::current()->is_VM_thread() ? "VMThread" : "JavaThread",
682 p2i(Thread::current()),
683 p2i(obj),
684 mark.value(),
685 obj->klass()->external_name(),
686 obj->klass()->prototype_header().value(),
687 p2i(biased_locker),
688 Thread::current()->is_VM_thread() ? "" : "(walking own stack)");
689
690 markWord unbiased_prototype = markWord::prototype().set_age(obj->mark().age());
691
692 GrowableArray<MonitorInfo*>* cached_monitor_info = get_or_compute_monitor_info(biased_locker);
|