254 // Store the unlocked value into the object's header. |
254 // Store the unlocked value into the object's header. |
255 obj->set_mark(unbiased_prototype); |
255 obj->set_mark(unbiased_prototype); |
256 } |
256 } |
257 } |
257 } |
258 |
258 |
|
259 #if INCLUDE_JFR |
259 // If requested, return information on which thread held the bias |
260 // If requested, return information on which thread held the bias |
260 if (biased_locker != NULL) { |
261 if (biased_locker != NULL) { |
261 *biased_locker = biased_thread; |
262 *biased_locker = biased_thread; |
262 } |
263 } |
|
264 #endif // INCLUDE_JFR |
263 |
265 |
264 return BiasedLocking::BIAS_REVOKED; |
266 return BiasedLocking::BIAS_REVOKED; |
265 } |
267 } |
266 |
268 |
267 |
269 |
495 virtual void doit() { |
497 virtual void doit() { |
496 if (_obj != NULL) { |
498 if (_obj != NULL) { |
497 if (TraceBiasedLocking) { |
499 if (TraceBiasedLocking) { |
498 tty->print_cr("Revoking bias with potentially per-thread safepoint:"); |
500 tty->print_cr("Revoking bias with potentially per-thread safepoint:"); |
499 } |
501 } |
|
502 |
500 JavaThread* biased_locker = NULL; |
503 JavaThread* biased_locker = NULL; |
501 _status_code = revoke_bias((*_obj)(), false, false, _requesting_thread, &biased_locker); |
504 _status_code = revoke_bias((*_obj)(), false, false, _requesting_thread, &biased_locker); |
|
505 #if INCLUDE_JFR |
502 if (biased_locker != NULL) { |
506 if (biased_locker != NULL) { |
503 _biased_locker_id = JFR_THREAD_ID(biased_locker); |
507 _biased_locker_id = JFR_THREAD_ID(biased_locker); |
504 } |
508 } |
|
509 #endif // INCLUDE_JFR |
|
510 |
505 clean_up_cached_monitor_info(); |
511 clean_up_cached_monitor_info(); |
506 return; |
512 return; |
507 } else { |
513 } else { |
508 if (TraceBiasedLocking) { |
514 if (TraceBiasedLocking) { |
509 tty->print_cr("Revoking bias with global safepoint:"); |
515 tty->print_cr("Revoking bias with global safepoint:"); |