diff -r cdffba164671 -r 3e5d28e6de32 src/hotspot/share/classfile/systemDictionary.cpp --- a/src/hotspot/share/classfile/systemDictionary.cpp Mon Aug 20 10:04:00 2018 +0200 +++ b/src/hotspot/share/classfile/systemDictionary.cpp Mon Aug 20 08:25:57 2018 -0400 @@ -988,18 +988,18 @@ Handle class_loader, Handle protection_domain, ClassFileStream* st, - const InstanceKlass* host_klass, + const InstanceKlass* unsafe_anonymous_host, GrowableArray* cp_patches, TRAPS) { EventClassLoad class_load_start_event; ClassLoaderData* loader_data; - if (host_klass != NULL) { - // Create a new CLD for anonymous class, that uses the same class loader - // as the host_klass - guarantee(oopDesc::equals(host_klass->class_loader(), class_loader()), "should be the same"); - loader_data = ClassLoaderData::anonymous_class_loader_data(class_loader); + if (unsafe_anonymous_host != NULL) { + // Create a new CLD for an unsafe anonymous class, that uses the same class loader + // as the unsafe_anonymous_host + guarantee(oopDesc::equals(unsafe_anonymous_host->class_loader(), class_loader()), "should be the same"); + loader_data = ClassLoaderData::unsafe_anonymous_class_loader_data(class_loader); } else { loader_data = ClassLoaderData::class_loader_data(class_loader()); } @@ -1016,12 +1016,12 @@ class_name, loader_data, protection_domain, - host_klass, + unsafe_anonymous_host, cp_patches, CHECK_NULL); - if (host_klass != NULL && k != NULL) { - // Anonymous classes must update ClassLoaderData holder (was host_klass loader) + if (unsafe_anonymous_host != NULL && k != NULL) { + // Unsafe anonymous classes must update ClassLoaderData holder (was unsafe_anonymous_host loader) // so that they can be unloaded when the mirror is no longer referenced. k->class_loader_data()->initialize_holder(Handle(THREAD, k->java_mirror())); @@ -1056,8 +1056,8 @@ post_class_load_event(&class_load_start_event, k, loader_data); } } - assert(host_klass != NULL || NULL == cp_patches, - "cp_patches only found with host_klass"); + assert(unsafe_anonymous_host != NULL || NULL == cp_patches, + "cp_patches only found with unsafe_anonymous_host"); return k; } @@ -1115,7 +1115,7 @@ class_name, loader_data, protection_domain, - NULL, // host_klass + NULL, // unsafe_anonymous_host NULL, // cp_patches CHECK_NULL); } @@ -3010,7 +3010,7 @@ _master_dictionary(master_dictionary) {} void do_cld(ClassLoaderData* cld) { ResourceMark rm; - if (cld->is_anonymous()) { + if (cld->is_unsafe_anonymous()) { return; } if (cld->is_system_class_loader_data() || cld->is_platform_class_loader_data()) {