< prev index next >

src/share/vm/runtime/objectMonitor.inline.hpp

Print this page

        

@@ -47,21 +47,23 @@
 inline jint ObjectMonitor::waiters() const {
   return _waiters;
 }
 
 inline void* ObjectMonitor::owner() const {
-  return _owner;
+  void* owner = _owner;
+  return owner != (void*) -1 ? owner : NULL;
 }
 
 inline void ObjectMonitor::clear() {
   assert(_header, "Fatal logic error in ObjectMonitor header!");
   assert(_count == 0, "Fatal logic error in ObjectMonitor count!");
   assert(_waiters == 0, "Fatal logic error in ObjectMonitor waiters!");
   assert(_recursions == 0, "Fatal logic error in ObjectMonitor recursions!");
   assert(_object != NULL, "Fatal logic error in ObjectMonitor object!");
   assert(_owner == 0, "Fatal logic error in ObjectMonitor owner!");
 
+  set_allocation_state(Free);
   _header = NULL;
   _object = NULL;
 }
 
 

@@ -91,11 +93,12 @@
 }
 
 
 // return number of threads contending for this monitor
 inline jint ObjectMonitor::contentions() const {
-  return _count;
+  jint count = _count;
+  return count < 0 ? count + max_jint : count;
 }
 
 // Do NOT set _count = 0. There is a race such that _count could
 // be set while inflating prior to setting _owner
 // Just use Atomic::inc/dec and assert 0 when monitor put on free list
< prev index next >