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); |