Mercurial > hg > graal-compiler
diff src/share/vm/oops/instanceKlass.cpp @ 10133:6337ca4dcad8
8008511: JSR 292: MemberName vmtarget refs to methods must be updated at class redefinition
Summary: Lazily create and maintain the MemberNameTable to be able to update MemberName's
Reviewed-by: coleenp, jrose, dholmes
Contributed-by: serguei.spitsyn@oracle.com
author | sspitsyn |
---|---|
date | Sat, 20 Apr 2013 04:07:08 -0700 |
parents | 8be1318fbe77 |
children | d587a5c30bd8 |
line wrap: on
line diff
--- a/src/share/vm/oops/instanceKlass.cpp Fri Apr 19 16:51:27 2013 -0700 +++ b/src/share/vm/oops/instanceKlass.cpp Sat Apr 20 04:07:08 2013 -0700 @@ -2329,6 +2329,12 @@ FreeHeap(jmeths); } + MemberNameTable* mnt = member_names(); + if (mnt != NULL) { + delete mnt; + set_member_names(NULL); + } + int* indices = methods_cached_itable_indices_acquire(); if (indices != (int*)NULL) { release_set_methods_cached_itable_indices(NULL); @@ -2757,6 +2763,17 @@ return NULL; } +void InstanceKlass::add_member_name(Handle mem_name) { + jweak mem_name_wref = JNIHandles::make_weak_global(mem_name); + MutexLocker ml(MemberNameTable_lock); + DEBUG_ONLY(No_Safepoint_Verifier nsv); + + if (_member_names == NULL) { + _member_names = new (ResourceObj::C_HEAP, mtClass) MemberNameTable(); + } + _member_names->add_member_name(mem_name_wref); +} + // ----------------------------------------------------------------------------------------------------- // Printing