< prev index next >
src/share/vm/classfile/systemDictionary.cpp
Print this page
@@ -1220,10 +1220,12 @@
// - Class from -Xbootclasspath/a. The class has no defined PackageEntry, or must
// be defined in an unnamed module.
bool SystemDictionary::is_shared_class_visible(Symbol* class_name,
instanceKlassHandle ik,
Handle class_loader, TRAPS) {
+ assert(!ModuleEntryTable::javabase_moduleEntry()->is_patched(),
+ "Cannot use sharing if java.base is patched");
ResourceMark rm;
int path_index = ik->shared_classpath_index();
SharedClassPathEntry* ent =
(SharedClassPathEntry*)FileMapInfo::shared_classpath(path_index);
if (!Universe::is_module_initialized()) {
@@ -1247,10 +1249,16 @@
if (pkg_entry != NULL) {
mod_entry = pkg_entry->module();
}
}
+ // If the archived class is from a module that has been patched at runtime,
+ // the class cannot be loaded from the archive.
+ if (mod_entry != NULL && mod_entry->is_patched()) {
+ return false;
+ }
+
if (class_loader.is_null()) {
assert(ent != NULL, "Shared class for NULL classloader must have valid SharedClassPathEntry");
// The NULL classloader can load archived class originated from the
// "modules" jimage and the -Xbootclasspath/a. For class from the
// "modules" jimage, the PackageEntry/ModuleEntry must be defined
< prev index next >