< prev index next >

src/hotspot/share/runtime/lockStack.cpp

Print this page

131           assert(top_index <= to_index(_top), "too many obj in lock_order");
132         }
133 
134         break;
135       }
136     }
137 
138     lock_index = lock_order.length();
139   }
140 
141   while (lock_index-- > 0) {
142     const oop obj = lock_order.at(lock_index);
143     const markWord mark = obj->mark_acquire();
144     assert(obj->is_locked(), "must be locked");
145     if (top_index > 0 && obj == _base[top_index - 1]) {
146       assert(mark.is_fast_locked() || mark.monitor()->is_owner_anonymous(),
147              "must be fast_locked or inflated by other thread");
148       top_index--;
149     } else {
150       assert(!mark.is_fast_locked(), "must be inflated");
151       assert(mark.monitor()->owner_raw() == get_thread() ||
152              (!leaf_frame && get_thread()->current_waiting_monitor() == mark.monitor()),
153              "must be owned by (or waited on by) thread");
154       assert(!contains(obj), "must not be on lock_stack");
155     }
156   }
157 }
158 #endif
159 
160 void LockStack::print_on(outputStream* st) {
161   for (int i = to_index(_top); (--i) >= 0;) {
162     st->print("LockStack[%d]: ", i);
163     oop o = _base[i];
164     if (oopDesc::is_oop(o)) {
165       o->print_on(st);
166     } else {
167       st->print_cr("not an oop: " PTR_FORMAT, p2i(o));
168     }
169   }
170 }

131           assert(top_index <= to_index(_top), "too many obj in lock_order");
132         }
133 
134         break;
135       }
136     }
137 
138     lock_index = lock_order.length();
139   }
140 
141   while (lock_index-- > 0) {
142     const oop obj = lock_order.at(lock_index);
143     const markWord mark = obj->mark_acquire();
144     assert(obj->is_locked(), "must be locked");
145     if (top_index > 0 && obj == _base[top_index - 1]) {
146       assert(mark.is_fast_locked() || mark.monitor()->is_owner_anonymous(),
147              "must be fast_locked or inflated by other thread");
148       top_index--;
149     } else {
150       assert(!mark.is_fast_locked(), "must be inflated");
151       assert(mark.monitor()->is_owner(get_thread()) ||
152              (!leaf_frame && get_thread()->current_waiting_monitor() == mark.monitor()),
153              "must be owned by (or waited on by) thread");
154       assert(!contains(obj), "must not be on lock_stack");
155     }
156   }
157 }
158 #endif
159 
160 void LockStack::print_on(outputStream* st) {
161   for (int i = to_index(_top); (--i) >= 0;) {
162     st->print("LockStack[%d]: ", i);
163     oop o = _base[i];
164     if (oopDesc::is_oop(o)) {
165       o->print_on(st);
166     } else {
167       st->print_cr("not an oop: " PTR_FORMAT, p2i(o));
168     }
169   }
170 }
< prev index next >