188 _single_stepping_posted = false; |
188 _single_stepping_posted = false; |
189 } |
189 } |
190 |
190 |
191 |
191 |
192 JvmtiFramePops* JvmtiEnvThreadState::get_frame_pops() { |
192 JvmtiFramePops* JvmtiEnvThreadState::get_frame_pops() { |
193 #ifdef ASSERT |
193 assert(get_thread() == Thread::current() || SafepointSynchronize::is_at_safepoint(), |
194 uint32_t debug_bits = 0; |
194 "frame pop data only accessible from same thread or at safepoint"); |
195 #endif |
|
196 assert(get_thread() == Thread::current() || JvmtiEnv::is_thread_fully_suspended(get_thread(), false, &debug_bits), |
|
197 "frame pop data only accessible from same thread or while suspended"); |
|
198 |
|
199 if (_frame_pops == NULL) { |
195 if (_frame_pops == NULL) { |
200 _frame_pops = new JvmtiFramePops(); |
196 _frame_pops = new JvmtiFramePops(); |
201 assert(_frame_pops != NULL, "_frame_pops != NULL"); |
197 assert(_frame_pops != NULL, "_frame_pops != NULL"); |
202 } |
198 } |
203 return _frame_pops; |
199 return _frame_pops; |
207 bool JvmtiEnvThreadState::has_frame_pops() { |
203 bool JvmtiEnvThreadState::has_frame_pops() { |
208 return _frame_pops == NULL? false : (_frame_pops->length() > 0); |
204 return _frame_pops == NULL? false : (_frame_pops->length() > 0); |
209 } |
205 } |
210 |
206 |
211 void JvmtiEnvThreadState::set_frame_pop(int frame_number) { |
207 void JvmtiEnvThreadState::set_frame_pop(int frame_number) { |
212 #ifdef ASSERT |
208 assert(get_thread() == Thread::current() || SafepointSynchronize::is_at_safepoint(), |
213 uint32_t debug_bits = 0; |
209 "frame pop data only accessible from same thread or at safepoint"); |
214 #endif |
|
215 assert(get_thread() == Thread::current() || JvmtiEnv::is_thread_fully_suspended(get_thread(), false, &debug_bits), |
|
216 "frame pop data only accessible from same thread or while suspended"); |
|
217 JvmtiFramePop fpop(frame_number); |
210 JvmtiFramePop fpop(frame_number); |
218 JvmtiEventController::set_frame_pop(this, fpop); |
211 JvmtiEventController::set_frame_pop(this, fpop); |
219 } |
212 } |
220 |
213 |
221 |
214 |
222 void JvmtiEnvThreadState::clear_frame_pop(int frame_number) { |
215 void JvmtiEnvThreadState::clear_frame_pop(int frame_number) { |
223 #ifdef ASSERT |
216 assert(get_thread() == Thread::current() || SafepointSynchronize::is_at_safepoint(), |
224 uint32_t debug_bits = 0; |
217 "frame pop data only accessible from same thread or at safepoint"); |
225 #endif |
|
226 assert(get_thread() == Thread::current() || JvmtiEnv::is_thread_fully_suspended(get_thread(), false, &debug_bits), |
|
227 "frame pop data only accessible from same thread or while suspended"); |
|
228 JvmtiFramePop fpop(frame_number); |
218 JvmtiFramePop fpop(frame_number); |
229 JvmtiEventController::clear_frame_pop(this, fpop); |
219 JvmtiEventController::clear_frame_pop(this, fpop); |
230 } |
220 } |
231 |
221 |
232 |
222 |
233 void JvmtiEnvThreadState::clear_to_frame_pop(int frame_number) { |
223 void JvmtiEnvThreadState::clear_to_frame_pop(int frame_number) { |
234 #ifdef ASSERT |
224 assert(get_thread() == Thread::current() || SafepointSynchronize::is_at_safepoint(), |
235 uint32_t debug_bits = 0; |
225 "frame pop data only accessible from same thread or at safepoint"); |
236 #endif |
|
237 assert(get_thread() == Thread::current() || JvmtiEnv::is_thread_fully_suspended(get_thread(), false, &debug_bits), |
|
238 "frame pop data only accessible from same thread or while suspended"); |
|
239 JvmtiFramePop fpop(frame_number); |
226 JvmtiFramePop fpop(frame_number); |
240 JvmtiEventController::clear_to_frame_pop(this, fpop); |
227 JvmtiEventController::clear_to_frame_pop(this, fpop); |
241 } |
228 } |
242 |
229 |
243 |
230 |
244 bool JvmtiEnvThreadState::is_frame_pop(int cur_frame_number) { |
231 bool JvmtiEnvThreadState::is_frame_pop(int cur_frame_number) { |
245 #ifdef ASSERT |
232 assert(get_thread() == Thread::current() || SafepointSynchronize::is_at_safepoint(), |
246 uint32_t debug_bits = 0; |
233 "frame pop data only accessible from same thread or at safepoint"); |
247 #endif |
|
248 assert(get_thread() == Thread::current() || JvmtiEnv::is_thread_fully_suspended(get_thread(), false, &debug_bits), |
|
249 "frame pop data only accessible from same thread or while suspended"); |
|
250 if (!get_thread()->is_interp_only_mode() || _frame_pops == NULL) { |
234 if (!get_thread()->is_interp_only_mode() || _frame_pops == NULL) { |
251 return false; |
235 return false; |
252 } |
236 } |
253 JvmtiFramePop fp(cur_frame_number); |
237 JvmtiFramePop fp(cur_frame_number); |
254 return get_frame_pops()->contains(fp); |
238 return get_frame_pops()->contains(fp); |