8013945: CMS fatal error: must own lock MemberNameTable_lock

The "delete mnt" needs to grab MemberNameTable_lock if !SafepointSynchronize::is_at_safepoint()

Reviewed-by: sla, mgerdin, dholmes, jmasa
This commit is contained in:
Serguei Spitsyn 2013-05-24 17:36:12 -07:00 committed by Serguei Spitsyn
parent 85761dd2b8
commit fb0022c7b1

View file

@ -2320,10 +2320,15 @@ void InstanceKlass::release_C_heap_structures() {
FreeHeap(jmeths); FreeHeap(jmeths);
} }
MemberNameTable* mnt = member_names(); // Deallocate MemberNameTable
if (mnt != NULL) { {
delete mnt; Mutex* lock_or_null = SafepointSynchronize::is_at_safepoint() ? NULL : MemberNameTable_lock;
set_member_names(NULL); MutexLockerEx ml(lock_or_null, Mutex::_no_safepoint_check_flag);
MemberNameTable* mnt = member_names();
if (mnt != NULL) {
delete mnt;
set_member_names(NULL);
}
} }
int* indices = methods_cached_itable_indices_acquire(); int* indices = methods_cached_itable_indices_acquire();