RFR (S) JDK-8007725 - Klass::restore_unshareable_info() triggers assert(k->java_mirror() == NULL)
Ioi Lam
ioi.lam at oracle.com
Wed Mar 13 22:49:15 PDT 2013
Hi, could someone review this? This fixes a crash related to OOM handling.
Thanks
- Ioi
On 03/11/2013 12:47 PM, Ioi Lam wrote:
> Please review:
> http://cr.openjdk.java.net/~iklam/8007725/null_mirror_001/
>
> Bug: NPG: Klass::restore_unshareable_info() triggers
> assert(k->java_mirror() == NULL)
>
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8007725
> or https://jbs.oracle.com/bugs/browse/JDK-8007725
>
> (The bugs.sun.com page may be unavailable for a couple of days due
> to recent change of confidentiality status.)
>
> Summary of fix:
>
> The assert is at:
>
> --------
> # Internal Error (src/share/vm/classfile/javaClasses.cpp:527)
> # assert(k->java_mirror() == NULL) failed: should only assign
> mirror once
> java_lang_Class::create_mirror(KlassHandle)
> Klass::restore_unshareable_info()
> InstanceKlass::restore_unshareable_info()
> instanceKlassHandle
> SystemDictionary::load_shared_class(instanceKlassHandle,Handle)
> --------
>
> This happens if during class loading, an OOM happened after
> Klass::restore_unshareable_info() has called
> java_lang_Class::create_mirror(), but before the class loading is
> completed.
>
> At this point, the class is not in the system dictionary. However the
> Klass structure is partially initialized.
>
> If the app tries to load the same class again, the assert happens.
>
> The fix is to undo all work performed by
> InstanceKlass::restore_unshareable_info().
>
> Tests executed:
>
> * JPRT
> * JCK (vm, lang, api/signaturetest)
> * UTE (vm.quick.testlist, )
>
> Thanks,
> Ioi
More information about the hotspot-runtime-dev
mailing list