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
|