127 // Returns true if owner field == DEFLATER_MARKER and false otherwise.
128 inline bool ObjectMonitor::owner_is_DEFLATER_MARKER() const {
129 return owner_raw() == DEFLATER_MARKER;
130 }
131
132 // Returns true if 'this' is being async deflated and false otherwise.
133 inline bool ObjectMonitor::is_being_async_deflated() {
134 return contentions() < 0;
135 }
136
137 // Return number of threads contending for this monitor.
138 inline int ObjectMonitor::contentions() const {
139 return Atomic::load(&_contentions);
140 }
141
142 // Add value to the contentions field.
143 inline void ObjectMonitor::add_to_contentions(int value) {
144 Atomic::add(&_contentions, value);
145 }
146
147 inline void ObjectMonitor::set_recursions(size_t recursions) {
148 assert(_recursions == 0, "must be");
149 assert(has_owner(), "must be owned");
150 _recursions = checked_cast<intx>(recursions);
151 }
152
153 inline void ObjectMonitor::increment_recursions(JavaThread* current) {
154 assert(has_owner(current), "must be the owner");
155 _recursions++;
156 }
157
158 // Clear _owner field; current value must match old_value.
159 inline void ObjectMonitor::release_clear_owner(JavaThread* old_owner) {
160 int64_t old_value = owner_id_from(old_owner);
161 #ifdef ASSERT
162 int64_t prev = Atomic::load(&_owner);
163 assert(prev == old_value, "unexpected prev owner=" INT64_FORMAT
164 ", expected=" INT64_FORMAT, prev, old_value);
165 #endif
166 Atomic::release_store(&_owner, NO_OWNER);
|
127 // Returns true if owner field == DEFLATER_MARKER and false otherwise.
128 inline bool ObjectMonitor::owner_is_DEFLATER_MARKER() const {
129 return owner_raw() == DEFLATER_MARKER;
130 }
131
132 // Returns true if 'this' is being async deflated and false otherwise.
133 inline bool ObjectMonitor::is_being_async_deflated() {
134 return contentions() < 0;
135 }
136
137 // Return number of threads contending for this monitor.
138 inline int ObjectMonitor::contentions() const {
139 return Atomic::load(&_contentions);
140 }
141
142 // Add value to the contentions field.
143 inline void ObjectMonitor::add_to_contentions(int value) {
144 Atomic::add(&_contentions, value);
145 }
146
147 inline void ObjectMonitor::inc_unmounted_vthreads() {
148 assert(_unmounted_vthreads >= 0, "");
149 Atomic::inc(&_unmounted_vthreads, memory_order_relaxed);
150 }
151
152 inline void ObjectMonitor::dec_unmounted_vthreads() {
153 assert(_unmounted_vthreads > 0, "");
154 Atomic::dec(&_unmounted_vthreads, memory_order_relaxed);
155 }
156
157 inline bool ObjectMonitor::has_unmounted_vthreads() const {
158 assert(_unmounted_vthreads >= 0, "");
159 return Atomic::load(&_unmounted_vthreads) > 0;
160 }
161
162 inline void ObjectMonitor::set_recursions(size_t recursions) {
163 assert(_recursions == 0, "must be");
164 assert(has_owner(), "must be owned");
165 _recursions = checked_cast<intx>(recursions);
166 }
167
168 inline void ObjectMonitor::increment_recursions(JavaThread* current) {
169 assert(has_owner(current), "must be the owner");
170 _recursions++;
171 }
172
173 // Clear _owner field; current value must match old_value.
174 inline void ObjectMonitor::release_clear_owner(JavaThread* old_owner) {
175 int64_t old_value = owner_id_from(old_owner);
176 #ifdef ASSERT
177 int64_t prev = Atomic::load(&_owner);
178 assert(prev == old_value, "unexpected prev owner=" INT64_FORMAT
179 ", expected=" INT64_FORMAT, prev, old_value);
180 #endif
181 Atomic::release_store(&_owner, NO_OWNER);
|