comparison src/share/vm/services/threadService.cpp @ 13391:0b9ea9a72436

8027630: SIGSEGV in const char*Klass::external_name() Reviewed-by: coleenp, sspitsyn, mgronlun
author sla
date Mon, 18 Nov 2013 10:20:13 +0100
parents ef748153ee8f
children 78bbf4d43a14
comparison
equal deleted inserted replaced
13390:d61a1a166f44 13391:0b9ea9a72436
198 for (ThreadDumpResult* dump = _threaddump_list; dump != NULL; dump = dump->next()) { 198 for (ThreadDumpResult* dump = _threaddump_list; dump != NULL; dump = dump->next()) {
199 dump->oops_do(f); 199 dump->oops_do(f);
200 } 200 }
201 } 201 }
202 202
203 void ThreadService::metadata_do(void f(Metadata*)) {
204 for (ThreadDumpResult* dump = _threaddump_list; dump != NULL; dump = dump->next()) {
205 dump->metadata_do(f);
206 }
207 }
208
203 void ThreadService::add_thread_dump(ThreadDumpResult* dump) { 209 void ThreadService::add_thread_dump(ThreadDumpResult* dump) {
204 MutexLocker ml(Management_lock); 210 MutexLocker ml(Management_lock);
205 if (_threaddump_list == NULL) { 211 if (_threaddump_list == NULL) {
206 _threaddump_list = dump; 212 _threaddump_list = dump;
207 } else { 213 } else {
449 for (ThreadSnapshot* ts = _snapshots; ts != NULL; ts = ts->next()) { 455 for (ThreadSnapshot* ts = _snapshots; ts != NULL; ts = ts->next()) {
450 ts->oops_do(f); 456 ts->oops_do(f);
451 } 457 }
452 } 458 }
453 459
460 void ThreadDumpResult::metadata_do(void f(Metadata*)) {
461 for (ThreadSnapshot* ts = _snapshots; ts != NULL; ts = ts->next()) {
462 ts->metadata_do(f);
463 }
464 }
465
454 StackFrameInfo::StackFrameInfo(javaVFrame* jvf, bool with_lock_info) { 466 StackFrameInfo::StackFrameInfo(javaVFrame* jvf, bool with_lock_info) {
455 _method = jvf->method(); 467 _method = jvf->method();
456 _bci = jvf->bci(); 468 _bci = jvf->bci();
469 _class_holder = _method->method_holder()->klass_holder();
457 _locked_monitors = NULL; 470 _locked_monitors = NULL;
458 if (with_lock_info) { 471 if (with_lock_info) {
459 ResourceMark rm; 472 ResourceMark rm;
460 GrowableArray<MonitorInfo*>* list = jvf->locked_monitors(); 473 GrowableArray<MonitorInfo*>* list = jvf->locked_monitors();
461 int length = list->length(); 474 int length = list->length();
475 int length = _locked_monitors->length(); 488 int length = _locked_monitors->length();
476 for (int i = 0; i < length; i++) { 489 for (int i = 0; i < length; i++) {
477 f->do_oop((oop*) _locked_monitors->adr_at(i)); 490 f->do_oop((oop*) _locked_monitors->adr_at(i));
478 } 491 }
479 } 492 }
493 f->do_oop(&_class_holder);
494 }
495
496 void StackFrameInfo::metadata_do(void f(Metadata*)) {
497 f(_method);
480 } 498 }
481 499
482 void StackFrameInfo::print_on(outputStream* st) const { 500 void StackFrameInfo::print_on(outputStream* st) const {
483 ResourceMark rm; 501 ResourceMark rm;
484 java_lang_Throwable::print_stack_element(st, method(), bci()); 502 java_lang_Throwable::print_stack_element(st, method(), bci());
617 length = (_jni_locked_monitors != NULL ? _jni_locked_monitors->length() : 0); 635 length = (_jni_locked_monitors != NULL ? _jni_locked_monitors->length() : 0);
618 for (int j = 0; j < length; j++) { 636 for (int j = 0; j < length; j++) {
619 f->do_oop((oop*) _jni_locked_monitors->adr_at(j)); 637 f->do_oop((oop*) _jni_locked_monitors->adr_at(j));
620 } 638 }
621 } 639 }
640
641 void ThreadStackTrace::metadata_do(void f(Metadata*)) {
642 int length = _frames->length();
643 for (int i = 0; i < length; i++) {
644 _frames->at(i)->metadata_do(f);
645 }
646 }
647
622 648
623 ConcurrentLocksDump::~ConcurrentLocksDump() { 649 ConcurrentLocksDump::~ConcurrentLocksDump() {
624 if (_retain_map_on_free) { 650 if (_retain_map_on_free) {
625 return; 651 return;
626 } 652 }
821 if (_concurrent_locks != NULL) { 847 if (_concurrent_locks != NULL) {
822 _concurrent_locks->oops_do(f); 848 _concurrent_locks->oops_do(f);
823 } 849 }
824 } 850 }
825 851
852 void ThreadSnapshot::metadata_do(void f(Metadata*)) {
853 if (_stack_trace != NULL) {
854 _stack_trace->metadata_do(f);
855 }
856 }
857
858
826 DeadlockCycle::DeadlockCycle() { 859 DeadlockCycle::DeadlockCycle() {
827 _is_deadlock = false; 860 _is_deadlock = false;
828 _threads = new (ResourceObj::C_HEAP, mtInternal) GrowableArray<JavaThread*>(INITIAL_ARRAY_SIZE, true); 861 _threads = new (ResourceObj::C_HEAP, mtInternal) GrowableArray<JavaThread*>(INITIAL_ARRAY_SIZE, true);
829 _next = NULL; 862 _next = NULL;
830 } 863 }