Mercurial > hg > truffle
changeset 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 | cd83e1d98347 |
children | 3970971c91e0 |
files | src/share/vm/oops/instanceKlass.cpp |
diffstat | 1 files changed, 9 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/oops/instanceKlass.cpp Fri May 24 10:21:12 2013 -0700 +++ b/src/share/vm/oops/instanceKlass.cpp Fri May 24 17:36:12 2013 -0700 @@ -2320,10 +2320,15 @@ FreeHeap(jmeths); } - MemberNameTable* mnt = member_names(); - if (mnt != NULL) { - delete mnt; - set_member_names(NULL); + // Deallocate MemberNameTable + { + Mutex* lock_or_null = SafepointSynchronize::is_at_safepoint() ? NULL : MemberNameTable_lock; + 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();