--- old/src/hotspot/share/classfile/systemDictionaryShared.cpp 2018-05-14 22:55:42.500180275 -0700 +++ new/src/hotspot/share/classfile/systemDictionaryShared.cpp 2018-05-14 22:55:41.900157435 -0700 @@ -62,16 +62,8 @@ static Mutex* SharedDictionary_lock = NULL; -void SystemDictionaryShared::initialize(TRAPS) { - if (_java_system_loader != NULL) { - SharedDictionary_lock = new Mutex(Mutex::leaf, "SharedDictionary_lock", true); - - // These classes need to be initialized before calling get_shared_jar_manifest(), etc. - SystemDictionary::ByteArrayInputStream_klass()->initialize(CHECK); - SystemDictionary::File_klass()->initialize(CHECK); - SystemDictionary::Jar_Manifest_klass()->initialize(CHECK); - SystemDictionary::CodeSource_klass()->initialize(CHECK); - } +void SystemDictionaryShared::initialize_locks() { + SharedDictionary_lock = new Mutex(Mutex::leaf, "SharedDictionary_lock", true); } oop SystemDictionaryShared::shared_protection_domain(int index) { @@ -99,6 +91,7 @@ // ByteArrayInputStream bais = new ByteArrayInputStream(buf); InstanceKlass* bais_klass = SystemDictionary::ByteArrayInputStream_klass(); + bais_klass->initialize(CHECK_NH); Handle bais = bais_klass->allocate_instance_handle(CHECK_(empty)); { const char* src = ent->manifest(); @@ -117,6 +110,7 @@ // manifest = new Manifest(bais) InstanceKlass* manifest_klass = SystemDictionary::Jar_Manifest_klass(); + manifest_klass->initialize(CHECK_NH); manifest = manifest_klass->allocate_instance_handle(CHECK_(empty)); { JavaValue result(T_VOID); @@ -141,10 +135,10 @@ Handle path_string = java_lang_String::create_from_str(path, CHECK_(url_h)); Klass* classLoaders_klass = SystemDictionary::jdk_internal_loader_ClassLoaders_klass(); - JavaCalls::call_static(&result, classLoaders_klass, - vmSymbols::toFileURL_name(), - vmSymbols::toFileURL_signature(), - path_string, CHECK_(url_h)); + JavaCalls::call_static(&result, classLoaders_klass, + vmSymbols::toFileURL_name(), + vmSymbols::toFileURL_signature(), + path_string, CHECK_(url_h)); atomic_set_shared_jar_url(shared_path_index, (oop)result.get_jobject()); } @@ -174,7 +168,7 @@ Handle manifest, Handle url, TRAPS) { - assert(class_loader == _java_system_loader, "unexpected class loader"); + assert(SystemDictionary::is_system_class_loader(class_loader()), "unexpected class loader"); // get_package_name() returns a NULL handle if the class is in unnamed package Handle pkgname_string = get_package_name(class_name, CHECK); if (pkgname_string.not_null()) { @@ -229,6 +223,7 @@ Handle url, TRAPS) { // CodeSource cs = new CodeSource(url, null); InstanceKlass* cs_klass = SystemDictionary::CodeSource_klass(); + cs_klass->initialize(CHECK_NH); Handle cs = cs_klass->allocate_instance_handle(CHECK_NH); JavaValue void_result(T_VOID); JavaCalls::call_special(&void_result, cs, cs_klass,