RFR (M) JDK-8163406: The fixup_module_list must be protected by Module_lock when inserting new entries
Lois Foltan
lois.foltan at oracle.com
Fri Sep 16 19:35:16 UTC 2016
On 9/13/2016 9:17 PM, Zhengyu Gu wrote:
> 3) in javaClasses
>>>>
>>>> Lines 856, 865: do you need a load_module_acquire when you read
>>>> javabase_entry->module() in the assertion?
>>> Completed, thanks for pointing that out. New webrev based on your and
>>> Coleen's comments at:
>>>
>>> http://cr.openjdk.java.net/~lfoltan/bug_jdk8163406.1/webrev/
>>
>> In this updated code:
>>
>> 803 assert(Universe::is_module_initialized() ||
>> 804 (ModuleEntryTable::javabase_defined() &&
>> 805 (module() ==
>> JNIHandles::resolve(ModuleEntryTable::javabase_moduleEntry()->module_load_acquire()))),
>> 806 "Incorrect java.lang.reflect.Module specification
>> while creating mirror");
>>
>> you are doubling up on the load-acquire because it is already inside
>> javabase_defined(). Whether you need the load-acquire in
>> javabase_defined() depends on the context in which javabase_defined()
>> is called - which isn't completely clear to me.
>>
> javabase_defined() itself does not need load-acquire, it looks like an
> unexpected side-effect to me. I would rather see explicit
> module_load_acquire() call than depending on this side-effect to
> ensure ordered access.
After further examination and discussion with David, the store-release
and load-acquire of java.base's _module field are not needed in the
contexts that the method javabase_defined() is currently being called
within. They have been removed. The latest webrev addresses the
primary focus of the bug - the need to ensure that the insertion into
the fixup_module_field list in the method
java_lang_Class::create_mirror() is protected by Module_lock. If it is
later determined that the ModuleEntry for java.base does need special
store-release/load_acquire, a separate issue will be opened to address this.
http://cr.openjdk.java.net/~lfoltan/bug_jdk8163406.2/webrev/
Thank you,
Lois
>
> -Zhengyu
>
>> David
>> ----
>>
>>> Thank you for reviewing!
>>> Lois
>>>
>>>>
>>>> thanks,
>>>> Karen
>>>>
>>>>
>>>>> On Sep 7, 2016, at 11:31 AM, Lois Foltan <lois.foltan at oracle.com>
>>>>> wrote:
>>>>>
>>>>> Hello,
>>>>>
>>>>> Please review the following fix:
>>>>>
>>>>> Webrev:
>>>>> http://cr.openjdk.java.net/~lfoltan/bug_jdk8163406/webrev/
>>>>>
>>>>> Bug: The fixup_module_list must be protected by Module_lock when
>>>>> inserting new entries
>>>>> https://bugs.openjdk.java.net/browse/JDK-8163406
>>>>>
>>>>> Summary:
>>>>> During bootstrapping, after the load of java.lang.Class, the method
>>>>> java_lang_Class::create_mirror() is multi-threaded. Before java.base
>>>>> is defined to the VM, the fixup_module_list stores all classes that
>>>>> once java.base is defined, must have their module field patched with
>>>>> java.base's java.lang.reflect.Module. Insertion of a class into the
>>>>> fixup_module_list must be protected via Module_lock. Included in this
>>>>> fix is correct order access store and load of the
>>>>> java.lang.reflect.Module field for java.base's ModuleEntry. Thank
>>>>> you to David Holmes for guidance on this piece.
>>>>>
>>>>> Testing:
>>>>> Full hotspot nightly testing, JCK vm & lang, several iterations of
>>>>> jaxp tests to test JDK-8164721
>>>
>
More information about the hotspot-runtime-dev
mailing list