hotspot/src/share/vm/classfile/javaClasses.cpp
changeset 41691 1be281ee5de4
parent 41183 207b92e69457
child 41877 1ff6dce8fe28
equal deleted inserted replaced
41690:038f2064e729 41691:1be281ee5de4
   778   if (module.is_null()) {
   778   if (module.is_null()) {
   779     // During startup, the module may be NULL only if java.base has not been defined yet.
   779     // During startup, the module may be NULL only if java.base has not been defined yet.
   780     // Put the class on the fixup_module_list to patch later when the java.lang.reflect.Module
   780     // Put the class on the fixup_module_list to patch later when the java.lang.reflect.Module
   781     // for java.base is known.
   781     // for java.base is known.
   782     assert(!Universe::is_module_initialized(), "Incorrect java.lang.reflect.Module pre module system initialization");
   782     assert(!Universe::is_module_initialized(), "Incorrect java.lang.reflect.Module pre module system initialization");
   783     MutexLocker m1(Module_lock, THREAD);
   783 
   784     // Keep list of classes needing java.base module fixup
   784     bool javabase_was_defined = false;
   785     if (!ModuleEntryTable::javabase_defined()) {
   785     {
   786       if (fixup_module_field_list() == NULL) {
   786       MutexLocker m1(Module_lock, THREAD);
   787         GrowableArray<Klass*>* list =
   787       // Keep list of classes needing java.base module fixup
   788           new (ResourceObj::C_HEAP, mtModule) GrowableArray<Klass*>(500, true);
   788       if (!ModuleEntryTable::javabase_defined()) {
   789         set_fixup_module_field_list(list);
   789         if (fixup_module_field_list() == NULL) {
       
   790           GrowableArray<Klass*>* list =
       
   791             new (ResourceObj::C_HEAP, mtModule) GrowableArray<Klass*>(500, true);
       
   792           set_fixup_module_field_list(list);
       
   793         }
       
   794         k->class_loader_data()->inc_keep_alive();
       
   795         fixup_module_field_list()->push(k());
       
   796       } else {
       
   797         javabase_was_defined = true;
   790       }
   798       }
   791       k->class_loader_data()->inc_keep_alive();
   799     }
   792       fixup_module_field_list()->push(k());
   800 
   793     } else {
   801     // If java.base was already defined then patch this particular class with java.base.
   794       // java.base was defined at some point between calling create_mirror()
   802     if (javabase_was_defined) {
   795       // and obtaining the Module_lock, patch this particular class with java.base.
       
   796       ModuleEntry *javabase_entry = ModuleEntryTable::javabase_moduleEntry();
   803       ModuleEntry *javabase_entry = ModuleEntryTable::javabase_moduleEntry();
   797       assert(javabase_entry != NULL && javabase_entry->module() != NULL,
   804       assert(javabase_entry != NULL && javabase_entry->module() != NULL,
   798              "Setting class module field, java.base should be defined");
   805              "Setting class module field, java.base should be defined");
   799       Handle javabase_handle(THREAD, JNIHandles::resolve(javabase_entry->module()));
   806       Handle javabase_handle(THREAD, JNIHandles::resolve(javabase_entry->module()));
   800       set_module(mirror(), javabase_handle());
   807       set_module(mirror(), javabase_handle());