< prev index next >

src/hotspot/share/runtime/biasedLocking.cpp

Print this page




 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);


< prev index next >