< prev index next >
src/hotspot/share/classfile/systemDictionaryShared.cpp
Print this page
*** 60,79 ****
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) {
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);
}
--- 60,71 ----
objArrayOop SystemDictionaryShared::_shared_jar_urls = NULL;
objArrayOop SystemDictionaryShared::_shared_jar_manifests = NULL;
static Mutex* SharedDictionary_lock = NULL;
! void SystemDictionaryShared::initialize_locks() {
SharedDictionary_lock = new Mutex(Mutex::leaf, "SharedDictionary_lock", true);
}
oop SystemDictionaryShared::shared_protection_domain(int index) {
return _shared_protection_domains->obj_at(index);
}
*** 86,132 ****
return _shared_jar_manifests->obj_at(index);
}
Handle SystemDictionaryShared::get_shared_jar_manifest(int shared_path_index, TRAPS) {
- Handle empty;
Handle manifest ;
if (shared_jar_manifest(shared_path_index) == NULL) {
SharedClassPathEntry* ent = FileMapInfo::shared_path(shared_path_index);
long size = ent->manifest_size();
if (size <= 0) {
! return empty; // No manifest - return NULL handle
}
// ByteArrayInputStream bais = new ByteArrayInputStream(buf);
- InstanceKlass* bais_klass = SystemDictionary::ByteArrayInputStream_klass();
- 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));
typeArrayHandle bufhandle(THREAD, buf);
char* dst = (char*)(buf->byte_at_addr(0));
memcpy(dst, src, (size_t)size);
! JavaValue result(T_VOID);
! JavaCalls::call_special(&result, bais, bais_klass,
! vmSymbols::object_initializer_name(),
vmSymbols::byte_array_void_signature(),
! bufhandle, CHECK_(empty));
! }
// manifest = new Manifest(bais)
! InstanceKlass* manifest_klass = SystemDictionary::Jar_Manifest_klass();
! manifest = manifest_klass->allocate_instance_handle(CHECK_(empty));
! {
! JavaValue result(T_VOID);
! JavaCalls::call_special(&result, manifest, manifest_klass,
! vmSymbols::object_initializer_name(),
vmSymbols::input_stream_void_signature(),
! bais, CHECK_(empty));
! }
atomic_set_shared_jar_manifest(shared_path_index, manifest());
}
manifest = Handle(THREAD, shared_jar_manifest(shared_path_index));
assert(manifest.not_null(), "sanity");
--- 78,111 ----
return _shared_jar_manifests->obj_at(index);
}
Handle SystemDictionaryShared::get_shared_jar_manifest(int shared_path_index, TRAPS) {
Handle manifest ;
if (shared_jar_manifest(shared_path_index) == NULL) {
SharedClassPathEntry* ent = FileMapInfo::shared_path(shared_path_index);
long size = ent->manifest_size();
if (size <= 0) {
! return Handle();
}
// ByteArrayInputStream bais = new ByteArrayInputStream(buf);
const char* src = ent->manifest();
assert(src != NULL, "No Manifest data");
! typeArrayOop buf = oopFactory::new_byteArray(size, CHECK_NH);
typeArrayHandle bufhandle(THREAD, buf);
char* dst = (char*)(buf->byte_at_addr(0));
memcpy(dst, src, (size_t)size);
! Handle bais = JavaCalls::new_instance(SystemDictionary::ByteArrayInputStream_klass(),
vmSymbols::byte_array_void_signature(),
! bufhandle, CHECK_NH);
// manifest = new Manifest(bais)
! manifest = JavaCalls::new_instance(SystemDictionary::Jar_Manifest_klass(),
vmSymbols::input_stream_void_signature(),
! bais, CHECK_NH);
atomic_set_shared_jar_manifest(shared_path_index, manifest());
}
manifest = Handle(THREAD, shared_jar_manifest(shared_path_index));
assert(manifest.not_null(), "sanity");
*** 172,182 ****
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");
// 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);
--- 151,161 ----
void SystemDictionaryShared::define_shared_package(Symbol* class_name,
Handle class_loader,
Handle manifest,
Handle url,
TRAPS) {
! 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);
*** 226,240 ****
// 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();
! 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(),
url, Handle(), CHECK_NH);
// protection_domain = SecureClassLoader.getProtectionDomain(cs);
Klass* secureClassLoader_klass = SystemDictionary::SecureClassLoader_klass();
--- 205,215 ----
// 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);
! Handle cs = JavaCalls::new_instance(SystemDictionary::CodeSource_klass(),
vmSymbols::url_code_signer_array_void_signature(),
url, Handle(), CHECK_NH);
// protection_domain = SecureClassLoader.getProtectionDomain(cs);
Klass* secureClassLoader_klass = SystemDictionary::SecureClassLoader_klass();
< prev index next >