< prev index next >
src/hotspot/share/runtime/objectMonitor.cpp
Print this page
rev 54572 : Checkpoint latest preliminary review patches for full OpenJDK review; merge with 8222295.patch.
rev 54573 : imported patch dcubed.monitor_deflate_conc.v2.01
rev 54574 : imported patch dcubed.monitor_deflate_conc.v2.02
*** 2097,2113 ****
if (AsyncDeflateIdleMonitors) {
// Race here if monitor is not owned! The above ref_count bump
// will cause subsequent async deflation to skip it. However,
// previous or concurrent async deflation is a race.
if (om_ptr->_owner == DEFLATER_MARKER && om_ptr->_contentions <= 0) {
! // Async deflation is in progress. Attempt to restore the
! // header/dmw to the object's header so that we only retry once
! // if the deflater thread happens to be slow.
om_ptr->install_displaced_markword_in_object(object);
om_ptr->dec_ref_count();
return false;
}
// The ObjectMonitor could have been deflated and reused for
// another object before we bumped the ref_count so make sure
// our object still refers to this ObjectMonitor.
const markOop tmp = object->mark();
if (!tmp->has_monitor() || tmp->monitor() != om_ptr) {
--- 2097,2117 ----
if (AsyncDeflateIdleMonitors) {
// Race here if monitor is not owned! The above ref_count bump
// will cause subsequent async deflation to skip it. However,
// previous or concurrent async deflation is a race.
if (om_ptr->_owner == DEFLATER_MARKER && om_ptr->_contentions <= 0) {
! // Async deflation is in progress.
! if (om_ptr->ref_count() <= 0) {
! // And our ref_count increment above lost the race to async
! // deflation. Attempt to restore the header/dmw to the
! // object's header so that we only retry once if the deflater
! // thread happens to be slow.
om_ptr->install_displaced_markword_in_object(object);
om_ptr->dec_ref_count();
return false;
}
+ }
// The ObjectMonitor could have been deflated and reused for
// another object before we bumped the ref_count so make sure
// our object still refers to this ObjectMonitor.
const markOop tmp = object->mark();
if (!tmp->has_monitor() || tmp->monitor() != om_ptr) {
< prev index next >