comparison src/share/vm/oops/instanceKlass.cpp @ 10347:6c138b9851fb

8013945: CMS fatal error: must own lock MemberNameTable_lock Summary: The "delete mnt" needs to grab MemberNameTable_lock if !SafepointSynchronize::is_at_safepoint() Reviewed-by: sla, mgerdin, dholmes, jmasa Contributed-by: serguei.spitsyn@oracle.com
author sspitsyn
date Fri, 24 May 2013 17:36:12 -0700
parents b7fa10a3a69a
children 836a62f43af9 e0c9a1d29eb4
comparison
equal deleted inserted replaced
10346:cd83e1d98347 10347:6c138b9851fb
2318 if (jmeths != (jmethodID*)NULL) { 2318 if (jmeths != (jmethodID*)NULL) {
2319 release_set_methods_jmethod_ids(NULL); 2319 release_set_methods_jmethod_ids(NULL);
2320 FreeHeap(jmeths); 2320 FreeHeap(jmeths);
2321 } 2321 }
2322 2322
2323 MemberNameTable* mnt = member_names(); 2323 // Deallocate MemberNameTable
2324 if (mnt != NULL) { 2324 {
2325 delete mnt; 2325 Mutex* lock_or_null = SafepointSynchronize::is_at_safepoint() ? NULL : MemberNameTable_lock;
2326 set_member_names(NULL); 2326 MutexLockerEx ml(lock_or_null, Mutex::_no_safepoint_check_flag);
2327 MemberNameTable* mnt = member_names();
2328 if (mnt != NULL) {
2329 delete mnt;
2330 set_member_names(NULL);
2331 }
2327 } 2332 }
2328 2333
2329 int* indices = methods_cached_itable_indices_acquire(); 2334 int* indices = methods_cached_itable_indices_acquire();
2330 if (indices != (int*)NULL) { 2335 if (indices != (int*)NULL) {
2331 release_set_methods_cached_itable_indices(NULL); 2336 release_set_methods_cached_itable_indices(NULL);