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 }
|
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 /*
70 if (_object != (cast_to_oop<intptr_t>(-1))) {
71 assert(oop(_object) == oopDesc::bs()->resolve_and_maybe_copy_oop(oop(_object)), "expect to-space copy");
72 }
73 */
74 return _object;
75 }
76
77 inline void* ObjectMonitor::object_addr() {
78 return (void *)(&_object);
79 }
80
81 inline void ObjectMonitor::set_object(void* obj) {
82 _object = obj;
83 if (_object != (cast_to_oop<intptr_t>(-1))) {
84 assert(oop(_object) == oopDesc::bs()->resolve_and_maybe_copy_oop(oop(_object)), "expect to-space copy");
85 }
86 }
87
88 inline bool ObjectMonitor::check(TRAPS) {
89 if (THREAD != _owner) {
90 if (THREAD->is_lock_owned((address) _owner)) {
91 _owner = THREAD; // regain ownership of inflated monitor
92 assert (_recursions == 0, "invariant") ;
93 } else {
94 check_slow(THREAD);
95 return false;
96 }
97 }
98 return true;
99 }
100
101
102 // return number of threads contending for this monitor
103 inline jint ObjectMonitor::contentions() const {
104 return _count;
105 }
|