< prev index next >
src/share/vm/classfile/systemDictionary.cpp
Print this page
*** 1208,1228 ****
// subclasses (yet). [Classes in the shared space are not part of the
// object hierarchy until loaded.]
instanceKlassHandle SystemDictionary::load_shared_class(
Symbol* class_name, Handle class_loader, TRAPS) {
- // Don't load shared class when JvmtiExport::should_post_class_file_load_hook()
- // is enabled since posting CFLH is not supported when loading shared class.
- if (!JvmtiExport::should_post_class_file_load_hook()) {
instanceKlassHandle ik (THREAD, find_shared_class(class_name));
// Make sure we only return the boot class for the NULL classloader.
if (ik.not_null() &&
ik->is_shared_boot_class() && class_loader.is_null()) {
Handle protection_domain;
return load_shared_class(ik, class_loader, protection_domain, THREAD);
}
- }
return instanceKlassHandle();
}
// Check if a shared class can be loaded by the specific classloader:
//
--- 1208,1224 ----
*** 1301,1315 ****
instanceKlassHandle SystemDictionary::load_shared_class(instanceKlassHandle ik,
Handle class_loader,
Handle protection_domain, TRAPS) {
instanceKlassHandle nh = instanceKlassHandle(); // null Handle
- if (JvmtiExport::should_post_class_file_load_hook()) {
- // Don't load shared class when JvmtiExport::should_post_class_file_load_hook()
- // is enabled since posting CFLH is not supported when loading shared class.
- return nh;
- }
if (ik.not_null()) {
Symbol* class_name = ik->name();
bool visible = is_shared_class_visible(
--- 1297,1306 ----
*** 1356,1365 ****
--- 1347,1364 ----
} else {
assert(i->is_shared(), "must be");
}
}
+ instanceKlassHandle new_ik = KlassFactory::check_shared_class_file_load_hook(
+ ik, class_name, class_loader, protection_domain, CHECK_(nh));
+ if (new_ik.not_null()) {
+ // The class is changed by CFLH. Return the new class. The shared class is
+ // not used.
+ return new_ik;
+ }
+
// Adjust methods to recover missing data. They need addresses for
// interpreter entry points and their default native method address
// must be reset.
// Updating methods must be done under a lock so multiple
< prev index next >