< prev index next >

src/share/vm/services/threadService.cpp

Print this page




 590 
 591   bool found = false;
 592   int num_frames = get_stack_depth();
 593   for (int depth = 0; depth < num_frames; depth++) {
 594     StackFrameInfo* frame = stack_frame_at(depth);
 595     int len = frame->num_locked_monitors();
 596     GrowableArray<oop>* locked_monitors = frame->locked_monitors();
 597     for (int j = 0; j < len; j++) {
 598       oop monitor = locked_monitors->at(j);
 599       assert(monitor != NULL, "must be a Java object");
 600       if (monitor == object) {
 601         found = true;
 602         break;
 603       }
 604     }
 605   }
 606   return found;
 607 }
 608 
 609 Handle ThreadStackTrace::allocate_fill_stack_trace_element_array(TRAPS) {
 610   Klass* k = SystemDictionary::StackTraceElement_klass();
 611   assert(k != NULL, "must be loaded in 1.4+");
 612   instanceKlassHandle ik(THREAD, k);
 613 
 614   // Allocate an array of java/lang/StackTraceElement object
 615   objArrayOop ste = oopFactory::new_objArray(ik(), _depth, CHECK_NH);
 616   objArrayHandle backtrace(THREAD, ste);
 617   for (int j = 0; j < _depth; j++) {
 618     StackFrameInfo* frame = _frames->at(j);
 619     methodHandle mh(THREAD, frame->method());
 620     oop element = java_lang_StackTraceElement::create(mh, frame->bci(), CHECK_NH);
 621     backtrace->obj_at_put(j, element);
 622   }
 623   return backtrace;
 624 }
 625 
 626 void ThreadStackTrace::add_stack_frame(javaVFrame* jvf) {
 627   StackFrameInfo* frame = new StackFrameInfo(jvf, _with_locked_monitors);
 628   _frames->append(frame);
 629   _depth++;
 630 }
 631 
 632 void ThreadStackTrace::oops_do(OopClosure* f) {
 633   int length = _frames->length();
 634   for (int i = 0; i < length; i++) {
 635     _frames->at(i)->oops_do(f);




 590 
 591   bool found = false;
 592   int num_frames = get_stack_depth();
 593   for (int depth = 0; depth < num_frames; depth++) {
 594     StackFrameInfo* frame = stack_frame_at(depth);
 595     int len = frame->num_locked_monitors();
 596     GrowableArray<oop>* locked_monitors = frame->locked_monitors();
 597     for (int j = 0; j < len; j++) {
 598       oop monitor = locked_monitors->at(j);
 599       assert(monitor != NULL, "must be a Java object");
 600       if (monitor == object) {
 601         found = true;
 602         break;
 603       }
 604     }
 605   }
 606   return found;
 607 }
 608 
 609 Handle ThreadStackTrace::allocate_fill_stack_trace_element_array(TRAPS) {
 610   InstanceKlass* ik = SystemDictionary::StackTraceElement_klass();
 611   assert(ik != NULL, "must be loaded in 1.4+");

 612 
 613   // Allocate an array of java/lang/StackTraceElement object
 614   objArrayOop ste = oopFactory::new_objArray(ik, _depth, CHECK_NH);
 615   objArrayHandle backtrace(THREAD, ste);
 616   for (int j = 0; j < _depth; j++) {
 617     StackFrameInfo* frame = _frames->at(j);
 618     methodHandle mh(THREAD, frame->method());
 619     oop element = java_lang_StackTraceElement::create(mh, frame->bci(), CHECK_NH);
 620     backtrace->obj_at_put(j, element);
 621   }
 622   return backtrace;
 623 }
 624 
 625 void ThreadStackTrace::add_stack_frame(javaVFrame* jvf) {
 626   StackFrameInfo* frame = new StackFrameInfo(jvf, _with_locked_monitors);
 627   _frames->append(frame);
 628   _depth++;
 629 }
 630 
 631 void ThreadStackTrace::oops_do(OopClosure* f) {
 632   int length = _frames->length();
 633   for (int i = 0; i < length; i++) {
 634     _frames->at(i)->oops_do(f);


< prev index next >