hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp
changeset 23180 e87156376bed
parent 22519 924605caa9a8
child 24424 2658d7834c6e
equal deleted inserted replaced
23179:c9ebeb289d1c 23180:e87156376bed
   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);