- Loading...
 
...
T-hash ObjectMonitor T-deflate
---------------------- +-----------------------+ --------------------------------------
save_om_ptr() { | owner=DEFLATER_MARKER | cmpxchg(DEFLATER_MARKER, &owner, NULL)
atomic inc ref_count : | count=-max_jint 0 | if (waiters != 0 or ref_count != 0) {
atomic inc ref_count | ref_count=1 | }
+-----------------------+ prev = cmpxchg(-max_jint, &count, 0)
...
T-hash ObjectMonitor T-deflate
------------------------ +-----------------------+ ----------------------------------------
save_om_ptr() { | owner=NULL | cmpxchg(DEFLATER_MARKER, &owner, NULL)
atomic inc ref_count | count=0 | if (waiters != 0 or ref_count != 0) {
if (owner == | ref_count=1 | cmpxchg(NULL, &owner, DEFLATER_MARKER)
DEFLATER_MARKER) { +-----------------------+ return false to cause a retry
} if (prev == 0 &&}
if (object no longer longer ownerprev == DEFLATER_MARKER) {cmpxchg(-max_jint, &count, 0)
has a monitor or restore headeror
is a different finish the deflationdifferent
monitor) { }
atomic dec ref_count
return false to
cause a retry
}
save om_ptr in the
ObjectMonitorHandle
}
...