569 }
570 }
571
572 void ThreadDumpResult::metadata_do(void f(Metadata*)) {
573 for (ThreadSnapshot* ts = _snapshots; ts != NULL; ts = ts->next()) {
574 ts->metadata_do(f);
575 }
576 }
577
578 ThreadsList* ThreadDumpResult::t_list() {
579 return _setter.list();
580 }
581
582 StackFrameInfo::StackFrameInfo(javaVFrame* jvf, bool with_lock_info) {
583 _method = jvf->method();
584 _bci = jvf->bci();
585 _class_holder = _method->method_holder()->klass_holder();
586 _locked_monitors = NULL;
587 if (with_lock_info) {
588 ResourceMark rm;
589 GrowableArray<MonitorInfo*>* list = jvf->locked_monitors();
590 int length = list->length();
591 if (length > 0) {
592 _locked_monitors = new (ResourceObj::C_HEAP, mtInternal) GrowableArray<oop>(length, true);
593 for (int i = 0; i < length; i++) {
594 MonitorInfo* monitor = list->at(i);
595 assert(monitor->owner() != NULL, "This monitor must have an owning object");
596 _locked_monitors->append(monitor->owner());
597 }
598 }
599 }
600 }
601
602 void StackFrameInfo::oops_do(OopClosure* f) {
603 if (_locked_monitors != NULL) {
604 int length = _locked_monitors->length();
605 for (int i = 0; i < length; i++) {
606 f->do_oop((oop*) _locked_monitors->adr_at(i));
607 }
608 }
|
569 }
570 }
571
572 void ThreadDumpResult::metadata_do(void f(Metadata*)) {
573 for (ThreadSnapshot* ts = _snapshots; ts != NULL; ts = ts->next()) {
574 ts->metadata_do(f);
575 }
576 }
577
578 ThreadsList* ThreadDumpResult::t_list() {
579 return _setter.list();
580 }
581
582 StackFrameInfo::StackFrameInfo(javaVFrame* jvf, bool with_lock_info) {
583 _method = jvf->method();
584 _bci = jvf->bci();
585 _class_holder = _method->method_holder()->klass_holder();
586 _locked_monitors = NULL;
587 if (with_lock_info) {
588 ResourceMark rm;
589 HandleMark hm;
590 GrowableArray<MonitorInfo*>* list = jvf->locked_monitors();
591 int length = list->length();
592 if (length > 0) {
593 _locked_monitors = new (ResourceObj::C_HEAP, mtInternal) GrowableArray<oop>(length, true);
594 for (int i = 0; i < length; i++) {
595 MonitorInfo* monitor = list->at(i);
596 assert(monitor->owner() != NULL, "This monitor must have an owning object");
597 _locked_monitors->append(monitor->owner());
598 }
599 }
600 }
601 }
602
603 void StackFrameInfo::oops_do(OopClosure* f) {
604 if (_locked_monitors != NULL) {
605 int length = _locked_monitors->length();
606 for (int i = 0; i < length; i++) {
607 f->do_oop((oop*) _locked_monitors->adr_at(i));
608 }
609 }
|