< prev index next >

src/hotspot/share/classfile/systemDictionaryShared.cpp

Print this page

@@ -60,20 +60,12 @@
 objArrayOop SystemDictionaryShared::_shared_jar_urls            =  NULL;
 objArrayOop SystemDictionaryShared::_shared_jar_manifests       =  NULL;
 
 static Mutex* SharedDictionary_lock = NULL;
 
-void SystemDictionaryShared::initialize(TRAPS) {
-  if (_java_system_loader != NULL) {
+void SystemDictionaryShared::initialize_locks() {
     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);
-  }
 }
 
 oop SystemDictionaryShared::shared_protection_domain(int index) {
   return _shared_protection_domains->obj_at(index);
 }

@@ -97,10 +89,11 @@
       return empty; // No manifest - return NULL handle
     }
 
     // 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();
       assert(src != NULL, "No Manifest data");
       typeArrayOop buf = oopFactory::new_byteArray(size, CHECK_(empty));

@@ -115,10 +108,11 @@
                               bufhandle, CHECK_(empty));
     }
 
     // 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);
       JavaCalls::call_special(&result, manifest, manifest_klass,
                               vmSymbols::object_initializer_name(),

@@ -172,11 +166,11 @@
 void SystemDictionaryShared::define_shared_package(Symbol*  class_name,
                                                    Handle class_loader,
                                                    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()) {
     Klass* app_classLoader_klass = SystemDictionary::jdk_internal_loader_ClassLoaders_AppClassLoader_klass();
     JavaValue result(T_OBJECT);

@@ -227,10 +221,11 @@
 // Get the ProtectionDomain associated with the CodeSource from the classloader.
 Handle SystemDictionaryShared::get_protection_domain_from_classloader(Handle class_loader,
                                                                       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,
                           vmSymbols::object_initializer_name(),
                           vmSymbols::url_code_signer_array_void_signature(),
< prev index next >