< prev index next >
src/share/vm/classfile/moduleEntry.cpp
Print this page
@@ -90,11 +90,11 @@
// Unnamed modules read everyone and all modules
// read java.base. If either of these conditions
// hold, readability has been established.
if (!this->is_named() ||
- (m == ModuleEntryTable::javabase_module())) {
+ (m == ModuleEntryTable::javabase_moduleEntry())) {
return true;
}
MutexLocker m1(Module_lock);
if (!has_reads()) {
@@ -356,20 +356,27 @@
if (module_handle.is_null()) {
fatal("Unable to finalize module definition for java.base");
}
// Set java.lang.reflect.Module, version and location for java.base
- ModuleEntry* jb_module = javabase_module();
+ ModuleEntry* jb_module = javabase_moduleEntry();
assert(jb_module != NULL, "java.base ModuleEntry not defined");
- jb_module->set_module(boot_loader_data->add_handle(module_handle));
jb_module->set_version(version);
jb_module->set_location(location);
+ // Once java.base's ModuleEntry _module field is set with the known
+ // java.lang.reflect.Module, java.base is considered "defined" to the VM.
+ jb_module->set_module_release_store(boot_loader_data->add_handle(module_handle));
+
// Store pointer to the ModuleEntry for java.base in the java.lang.reflect.Module object.
java_lang_reflect_Module::set_module_entry(module_handle(), jb_module);
+
+ // Patch any previously loaded classes' module field with java.base's java.lang.reflect.Module.
+ patch_javabase_entries(module_handle);
}
void ModuleEntryTable::patch_javabase_entries(Handle module_handle) {
+ assert(Module_lock->owned_by_self(), "should have the Module_lock");
if (module_handle.is_null()) {
fatal("Unable to patch the module field of classes loaded prior to java.base's definition, invalid java.lang.reflect.Module");
}
// Do the fixups for the basic primitive types
< prev index next >