RFR(XS) 8191585 VM anonymous classes created during CDS dump time cause crash

harold seigel harold.seigel at oracle.com
Tue Mar 6 19:45:02 UTC 2018


Hi Ioi,

This change will cause ClassLoaderData::is_builtin_class_loader_data() 
to return false for all anonymous classes except for the boot loader.

Also, other callers of is_builtin_class_loader_data(), such as 
Klass::class_loader_and_module_name(), probably want that function to 
return true even for anonymous CLDs.

Instead of changing is_platform_class_loader_data() and 
is_system_class_loader_data(), could you add a !is_anonymous() check to 
do_cld() ?

Or, add new is_*_class_loader_data() methods that only return true if 
the CLD is not anonymous?

Thanks, Harold


On 3/6/2018 2:20 PM, Ioi Lam wrote:
> Hi,
>
> Please review this small VM change and the corresponding test case.
>
> https://bugs.openjdk.java.net/browse/JDK-8191585
> http://cr.openjdk.java.net/~iklam/jdk11/8191585-vm-anon-classes-cause-dumping-crash.v01/ 
>
>
> The crash happens in the following code:
>
> class CombineDictionariesClosure : public CLDClosure {
>     void do_cld(ClassLoaderData* cld) {
>       if (cld->is_system_class_loader_data() || 
> cld->is_platform_class_loader_data()) {
>         for (int i = 0; i < cld->dictionary()->table_size(); ++i) {
>                                  ^^^^^^^^^^^ == NULL
>
> The bug is in cld->is_system_class_loader_data() -- the CLD of anon 
> classes have a NULL
> cld::dictionary(), but its cld::class_loader() returns the loader 
> object of the holder
> class.
>
> The fix is to reject if cld::is_anonymous() is true.
>
> Thanks
> - Ioi



More information about the hotspot-runtime-dev mailing list