550 _last = ts;
551 }
552
553 void ThreadDumpResult::metadata_do(void f(Metadata*)) {
554 for (ThreadSnapshot* ts = _snapshots; ts != NULL; ts = ts->next()) {
555 ts->metadata_do(f);
556 }
557 }
558
559 ThreadsList* ThreadDumpResult::t_list() {
560 return _setter.list();
561 }
562
563 StackFrameInfo::StackFrameInfo(javaVFrame* jvf, bool with_lock_info) {
564 _method = jvf->method();
565 _bci = jvf->bci();
566 _class_holder = OopHandle(Universe::vm_global(), _method->method_holder()->klass_holder());
567 _locked_monitors = NULL;
568 if (with_lock_info) {
569 ResourceMark rm;
570 GrowableArray<MonitorInfo*>* list = jvf->locked_monitors();
571 int length = list->length();
572 if (length > 0) {
573 _locked_monitors = new (ResourceObj::C_HEAP, mtServiceability) GrowableArray<OopHandle>(length, mtServiceability);
574 for (int i = 0; i < length; i++) {
575 MonitorInfo* monitor = list->at(i);
576 assert(monitor->owner() != NULL, "This monitor must have an owning object");
577 _locked_monitors->append(OopHandle(Universe::vm_global(), monitor->owner()));
578 }
579 }
580 }
581 }
582
583 StackFrameInfo::~StackFrameInfo() {
584 if (_locked_monitors != NULL) {
585 for (int i = 0; i < _locked_monitors->length(); i++) {
586 _locked_monitors->at(i).release(Universe::vm_global());
587 }
588 delete _locked_monitors;
589 }
|
550 _last = ts;
551 }
552
553 void ThreadDumpResult::metadata_do(void f(Metadata*)) {
554 for (ThreadSnapshot* ts = _snapshots; ts != NULL; ts = ts->next()) {
555 ts->metadata_do(f);
556 }
557 }
558
559 ThreadsList* ThreadDumpResult::t_list() {
560 return _setter.list();
561 }
562
563 StackFrameInfo::StackFrameInfo(javaVFrame* jvf, bool with_lock_info) {
564 _method = jvf->method();
565 _bci = jvf->bci();
566 _class_holder = OopHandle(Universe::vm_global(), _method->method_holder()->klass_holder());
567 _locked_monitors = NULL;
568 if (with_lock_info) {
569 ResourceMark rm;
570 HandleMark hm;
571 GrowableArray<MonitorInfo*>* list = jvf->locked_monitors();
572 int length = list->length();
573 if (length > 0) {
574 _locked_monitors = new (ResourceObj::C_HEAP, mtServiceability) GrowableArray<OopHandle>(length, mtServiceability);
575 for (int i = 0; i < length; i++) {
576 MonitorInfo* monitor = list->at(i);
577 assert(monitor->owner() != NULL, "This monitor must have an owning object");
578 _locked_monitors->append(OopHandle(Universe::vm_global(), monitor->owner()));
579 }
580 }
581 }
582 }
583
584 StackFrameInfo::~StackFrameInfo() {
585 if (_locked_monitors != NULL) {
586 for (int i = 0; i < _locked_monitors->length(); i++) {
587 _locked_monitors->at(i).release(Universe::vm_global());
588 }
589 delete _locked_monitors;
590 }
|