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