mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
8249262: Initialize InstanceKlass::_package_entry during CDS dump time
Reviewed-by: iklam, minqi
This commit is contained in:
parent
3aabbd7216
commit
bbbfaa58c0
7 changed files with 64 additions and 13 deletions
|
@ -1053,11 +1053,19 @@ InstanceKlass* SystemDictionaryShared::find_or_load_shared_class(
|
|||
return k;
|
||||
}
|
||||
|
||||
PackageEntry* SystemDictionaryShared::get_package_entry_from_class_name(Handle class_loader, Symbol* class_name) {
|
||||
PackageEntry* pkg_entry = NULL;
|
||||
TempNewSymbol pkg_name = ClassLoader::package_from_class_name(class_name);
|
||||
PackageEntry* SystemDictionaryShared::get_package_entry_from_class(InstanceKlass* ik, Handle class_loader) {
|
||||
PackageEntry* pkg_entry = ik->package();
|
||||
if (MetaspaceShared::use_full_module_graph() && ik->is_shared() && pkg_entry != NULL) {
|
||||
assert(MetaspaceShared::is_in_shared_metaspace(pkg_entry), "must be");
|
||||
assert(!ik->is_shared_unregistered_class(), "unexpected archived package entry for an unregistered class");
|
||||
assert(ik->module()->is_named(), "unexpected archived package entry for a class in an unnamed module");
|
||||
return pkg_entry;
|
||||
}
|
||||
TempNewSymbol pkg_name = ClassLoader::package_from_class_name(ik->name());
|
||||
if (pkg_name != NULL) {
|
||||
pkg_entry = class_loader_data(class_loader)->packages()->lookup_only(pkg_name);
|
||||
} else {
|
||||
pkg_entry = NULL;
|
||||
}
|
||||
return pkg_entry;
|
||||
}
|
||||
|
@ -1072,7 +1080,7 @@ InstanceKlass* SystemDictionaryShared::load_shared_class_for_builtin_loader(
|
|||
SystemDictionary::is_system_class_loader(class_loader())) ||
|
||||
(ik->is_shared_platform_class() &&
|
||||
SystemDictionary::is_platform_class_loader(class_loader()))) {
|
||||
PackageEntry* pkg_entry = get_package_entry_from_class_name(class_loader, class_name);
|
||||
PackageEntry* pkg_entry = get_package_entry_from_class(ik, class_loader);
|
||||
Handle protection_domain =
|
||||
SystemDictionaryShared::init_security_info(class_loader, ik, pkg_entry, CHECK_NULL);
|
||||
return load_shared_class(ik, class_loader, protection_domain, NULL, pkg_entry, THREAD);
|
||||
|
@ -1172,7 +1180,7 @@ InstanceKlass* SystemDictionaryShared::acquire_class_for_current_thread(
|
|||
loader_data->add_class(ik);
|
||||
|
||||
// Get the package entry.
|
||||
PackageEntry* pkg_entry = get_package_entry_from_class_name(class_loader, ik->name());
|
||||
PackageEntry* pkg_entry = get_package_entry_from_class(ik, class_loader);
|
||||
|
||||
// Load and check super/interfaces, restore unsharable info
|
||||
InstanceKlass* shared_klass = load_shared_class(ik, class_loader, protection_domain,
|
||||
|
@ -1684,7 +1692,7 @@ InstanceKlass* SystemDictionaryShared::prepare_shared_lambda_proxy_class(Instanc
|
|||
InstanceKlass* caller_ik, TRAPS) {
|
||||
Handle class_loader(THREAD, caller_ik->class_loader());
|
||||
Handle protection_domain;
|
||||
PackageEntry* pkg_entry = get_package_entry_from_class_name(class_loader, caller_ik->name());
|
||||
PackageEntry* pkg_entry = get_package_entry_from_class(caller_ik, class_loader);
|
||||
if (caller_ik->class_loader() != NULL) {
|
||||
protection_domain = SystemDictionaryShared::init_security_info(class_loader, caller_ik, pkg_entry, CHECK_NULL);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue