< prev index next >

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

Print this page




  32   return 0;
  33 }
  34 
  35 inline markOop ObjectMonitor::header() const {
  36   return _header;
  37 }
  38 
  39 inline void ObjectMonitor::set_header(markOop hdr) {
  40   _header = hdr;
  41 }
  42 
  43 inline jint ObjectMonitor::count() const {
  44   return _count;
  45 }
  46 
  47 inline jint ObjectMonitor::waiters() const {
  48   return _waiters;
  49 }
  50 
  51 inline void* ObjectMonitor::owner() const {
  52   return _owner;

  53 }
  54 
  55 inline void ObjectMonitor::clear() {
  56   assert(_header, "Fatal logic error in ObjectMonitor header!");
  57   assert(_count == 0, "Fatal logic error in ObjectMonitor count!");
  58   assert(_waiters == 0, "Fatal logic error in ObjectMonitor waiters!");
  59   assert(_recursions == 0, "Fatal logic error in ObjectMonitor recursions!");
  60   assert(_object != NULL, "Fatal logic error in ObjectMonitor object!");
  61   assert(_owner == 0, "Fatal logic error in ObjectMonitor owner!");
  62 

  63   _header = NULL;
  64   _object = NULL;
  65 }
  66 
  67 
  68 inline void* ObjectMonitor::object() const {
  69   return _object;
  70 }
  71 
  72 inline void* ObjectMonitor::object_addr() {
  73   return (void *)(&_object);
  74 }
  75 
  76 inline void ObjectMonitor::set_object(void* obj) {
  77   _object = obj;
  78 }
  79 
  80 inline bool ObjectMonitor::check(TRAPS) {
  81   if (THREAD != _owner) {
  82     if (THREAD->is_lock_owned((address) _owner)) {
  83       _owner = THREAD;  // regain ownership of inflated monitor
  84       assert (_recursions == 0, "invariant") ;
  85     } else {
  86       check_slow(THREAD);
  87       return false;
  88     }
  89   }
  90   return true;
  91 }
  92 
  93 
  94 // return number of threads contending for this monitor
  95 inline jint ObjectMonitor::contentions() const {
  96   return _count;

  97 }
  98 
  99 // Do NOT set _count = 0. There is a race such that _count could
 100 // be set while inflating prior to setting _owner
 101 // Just use Atomic::inc/dec and assert 0 when monitor put on free list
 102 inline void ObjectMonitor::set_owner(void* owner) {
 103   _owner = owner;
 104   _recursions = 0;
 105 }
 106 
 107 
 108 #endif // SHARE_VM_RUNTIME_OBJECTMONITOR_INLINE_HPP


  32   return 0;
  33 }
  34 
  35 inline markOop ObjectMonitor::header() const {
  36   return _header;
  37 }
  38 
  39 inline void ObjectMonitor::set_header(markOop hdr) {
  40   _header = hdr;
  41 }
  42 
  43 inline jint ObjectMonitor::count() const {
  44   return _count;
  45 }
  46 
  47 inline jint ObjectMonitor::waiters() const {
  48   return _waiters;
  49 }
  50 
  51 inline void* ObjectMonitor::owner() const {
  52   void* owner = _owner;
  53   return owner != (void*) -1 ? owner : NULL;
  54 }
  55 
  56 inline void ObjectMonitor::clear() {
  57   assert(_header, "Fatal logic error in ObjectMonitor header!");
  58   assert(_count == 0, "Fatal logic error in ObjectMonitor count!");
  59   assert(_waiters == 0, "Fatal logic error in ObjectMonitor waiters!");
  60   assert(_recursions == 0, "Fatal logic error in ObjectMonitor recursions!");
  61   assert(_object != NULL, "Fatal logic error in ObjectMonitor object!");
  62   assert(_owner == 0, "Fatal logic error in ObjectMonitor owner!");
  63 
  64   set_allocation_state(Free);
  65   _header = NULL;
  66   _object = NULL;
  67 }
  68 
  69 
  70 inline void* ObjectMonitor::object() const {
  71   return _object;
  72 }
  73 
  74 inline void* ObjectMonitor::object_addr() {
  75   return (void *)(&_object);
  76 }
  77 
  78 inline void ObjectMonitor::set_object(void* obj) {
  79   _object = obj;
  80 }
  81 
  82 inline bool ObjectMonitor::check(TRAPS) {
  83   if (THREAD != _owner) {
  84     if (THREAD->is_lock_owned((address) _owner)) {
  85       _owner = THREAD;  // regain ownership of inflated monitor
  86       assert (_recursions == 0, "invariant") ;
  87     } else {
  88       check_slow(THREAD);
  89       return false;
  90     }
  91   }
  92   return true;
  93 }
  94 
  95 
  96 // return number of threads contending for this monitor
  97 inline jint ObjectMonitor::contentions() const {
  98   jint count = _count;
  99   return count < 0 ? count + max_jint : count;
 100 }
 101 
 102 // Do NOT set _count = 0. There is a race such that _count could
 103 // be set while inflating prior to setting _owner
 104 // Just use Atomic::inc/dec and assert 0 when monitor put on free list
 105 inline void ObjectMonitor::set_owner(void* owner) {
 106   _owner = owner;
 107   _recursions = 0;
 108 }
 109 
 110 
 111 #endif // SHARE_VM_RUNTIME_OBJECTMONITOR_INLINE_HPP
< prev index next >