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 }
|