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
Mon Sep 19 16:00:34 UTC 2016


Thank you for the review Coleen!
Lois

On 9/18/2016 11:23 PM, Coleen Phillimore wrote:
> This looks good to me.
> Thanks,
> Coleen
>
> On 9/16/16 3:35 PM, Lois Foltan wrote:
>>
>> 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