463
464 void ThreadDumpResult::metadata_do(void f(Metadata*)) {
465 for (ThreadSnapshot* ts = _snapshots; ts != NULL; ts = ts->next()) {
466 ts->metadata_do(f);
467 }
468 }
469
470 StackFrameInfo::StackFrameInfo(javaVFrame* jvf, bool with_lock_info) {
471 _method = jvf->method();
472 _bci = jvf->bci();
473 _class_holder = _method->method_holder()->klass_holder();
474 _locked_monitors = NULL;
475 if (with_lock_info) {
476 ResourceMark rm;
477 GrowableArray<MonitorInfo*>* list = jvf->locked_monitors();
478 int length = list->length();
479 if (length > 0) {
480 _locked_monitors = new (ResourceObj::C_HEAP, mtInternal) GrowableArray<oop>(length, true);
481 for (int i = 0; i < length; i++) {
482 MonitorInfo* monitor = list->at(i);
483 assert(monitor->owner(), "This monitor must have an owning object");
484 _locked_monitors->append(monitor->owner());
485 }
486 }
487 }
488 }
489
490 void StackFrameInfo::oops_do(OopClosure* f) {
491 if (_locked_monitors != NULL) {
492 int length = _locked_monitors->length();
493 for (int i = 0; i < length; i++) {
494 f->do_oop((oop*) _locked_monitors->adr_at(i));
495 }
496 }
497 f->do_oop(&_class_holder);
498 }
499
500 void StackFrameInfo::metadata_do(void f(Metadata*)) {
501 f(_method);
502 }
503
|
463
464 void ThreadDumpResult::metadata_do(void f(Metadata*)) {
465 for (ThreadSnapshot* ts = _snapshots; ts != NULL; ts = ts->next()) {
466 ts->metadata_do(f);
467 }
468 }
469
470 StackFrameInfo::StackFrameInfo(javaVFrame* jvf, bool with_lock_info) {
471 _method = jvf->method();
472 _bci = jvf->bci();
473 _class_holder = _method->method_holder()->klass_holder();
474 _locked_monitors = NULL;
475 if (with_lock_info) {
476 ResourceMark rm;
477 GrowableArray<MonitorInfo*>* list = jvf->locked_monitors();
478 int length = list->length();
479 if (length > 0) {
480 _locked_monitors = new (ResourceObj::C_HEAP, mtInternal) GrowableArray<oop>(length, true);
481 for (int i = 0; i < length; i++) {
482 MonitorInfo* monitor = list->at(i);
483 assert(monitor->owner() != NULL, "This monitor must have an owning object");
484 _locked_monitors->append(monitor->owner());
485 }
486 }
487 }
488 }
489
490 void StackFrameInfo::oops_do(OopClosure* f) {
491 if (_locked_monitors != NULL) {
492 int length = _locked_monitors->length();
493 for (int i = 0; i < length; i++) {
494 f->do_oop((oop*) _locked_monitors->adr_at(i));
495 }
496 }
497 f->do_oop(&_class_holder);
498 }
499
500 void StackFrameInfo::metadata_do(void f(Metadata*)) {
501 f(_method);
502 }
503
|