Mercurial > hg > graal-compiler
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 } |