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()); |