src/share/vm/services/threadService.cpp

Print this page
rev 2 : [mq]: wkk.patch


 524   bool found = false;
 525   int num_frames = get_stack_depth();
 526   for (int depth = 0; depth < num_frames; depth++) {
 527     StackFrameInfo* frame = stack_frame_at(depth);
 528     int len = frame->num_locked_monitors();
 529     GrowableArray<oop>* locked_monitors = frame->locked_monitors();
 530     for (int j = 0; j < len; j++) {
 531       oop monitor = locked_monitors->at(j);
 532       assert(monitor != NULL && monitor->is_instance(), "must be a Java object");
 533       if (monitor == object) {
 534         found = true;
 535         break;
 536       }
 537     }
 538   }
 539   return found;
 540 }
 541 
 542 Handle ThreadStackTrace::allocate_fill_stack_trace_element_array(TRAPS) {
 543   klassOop k = SystemDictionary::stackTraceElement_klass();

 544   instanceKlassHandle ik(THREAD, k);
 545 
 546   // Allocate an array of java/lang/StackTraceElement object
 547   objArrayOop ste = oopFactory::new_objArray(ik(), _depth, CHECK_NH);
 548   objArrayHandle backtrace(THREAD, ste);
 549   for (int j = 0; j < _depth; j++) {
 550     StackFrameInfo* frame = _frames->at(j);
 551     methodHandle mh(THREAD, frame->method());
 552     oop element = java_lang_StackTraceElement::create(mh, frame->bci(), CHECK_NH);
 553     backtrace->obj_at_put(j, element);
 554   }
 555   return backtrace;
 556 }
 557 
 558 void ThreadStackTrace::add_stack_frame(javaVFrame* jvf) {
 559   StackFrameInfo* frame = new StackFrameInfo(jvf, _with_locked_monitors);
 560   _frames->append(frame);
 561   _depth++;
 562 }
 563 




 524   bool found = false;
 525   int num_frames = get_stack_depth();
 526   for (int depth = 0; depth < num_frames; depth++) {
 527     StackFrameInfo* frame = stack_frame_at(depth);
 528     int len = frame->num_locked_monitors();
 529     GrowableArray<oop>* locked_monitors = frame->locked_monitors();
 530     for (int j = 0; j < len; j++) {
 531       oop monitor = locked_monitors->at(j);
 532       assert(monitor != NULL && monitor->is_instance(), "must be a Java object");
 533       if (monitor == object) {
 534         found = true;
 535         break;
 536       }
 537     }
 538   }
 539   return found;
 540 }
 541 
 542 Handle ThreadStackTrace::allocate_fill_stack_trace_element_array(TRAPS) {
 543   klassOop k = SystemDictionary::stackTraceElement_klass();
 544   assert(k != NULL, "must be loaded in 1.4+");
 545   instanceKlassHandle ik(THREAD, k);
 546 
 547   // Allocate an array of java/lang/StackTraceElement object
 548   objArrayOop ste = oopFactory::new_objArray(ik(), _depth, CHECK_NH);
 549   objArrayHandle backtrace(THREAD, ste);
 550   for (int j = 0; j < _depth; j++) {
 551     StackFrameInfo* frame = _frames->at(j);
 552     methodHandle mh(THREAD, frame->method());
 553     oop element = java_lang_StackTraceElement::create(mh, frame->bci(), CHECK_NH);
 554     backtrace->obj_at_put(j, element);
 555   }
 556   return backtrace;
 557 }
 558 
 559 void ThreadStackTrace::add_stack_frame(javaVFrame* jvf) {
 560   StackFrameInfo* frame = new StackFrameInfo(jvf, _with_locked_monitors);
 561   _frames->append(frame);
 562   _depth++;
 563 }
 564