[14] RFR: 8235982: AArch64: gc/stress/jfr/TestStressAllocationGCEventsWithParallel.java assertion failure

Thomas Schatzl thomas.schatzl at oracle.com
Tue Dec 17 14:47:38 UTC 2019


Hi,

On 17.12.19 14:53, Stefan Johansson wrote:
> Hi Nick,
> 
> Thanks for fixing this issue.

   yes :)

> 
> On 2019-12-17 07:22, Nick Gasson wrote:
>> Hi,
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8235982
>> Webrev: http://cr.openjdk.java.net/~ngasson/8235982/webrev.01/
>>
>> The above test has been intermittently failing with an assertion error 
>> on AArch64 since the changes in "8220465: Use shadow regions for 
>> faster ParallelGC full GCs".
>>
>> PSParallelCompact::decrement_destination_counts assumes that 
>> shadow_region() is valid if mark_copied() succeeded (i.e. 
>> _shadow_state was FilledShadow before). 
>> MoveAndUpdateShadowClosure::complete_region sets these with the 
>> following code:
>>
>>    // Record the shadow region index
>>    region_ptr->set_shadow_region(_shadow);
>>    // Mark the shadow region as filled to indicate the data is ready 
>> to be
>>    // copied back
>>    region_ptr->mark_filled();
>>
>> set_shadow_region() does an ordinary store to a volatile variable and 
>> mark_filled() uses a CAS to set _shadow_state to FilledShadow with 
>> relaxed memory ordering. On a non-TSO architecture like AArch64 these 
>> two stores may be reordered when observed from another thread.
>>
>> Fix by making the CAS to set _shadow_state use the default 
>> conservative memory order which inserts a full barrier (see the 
>> discussion on the JBS entry).
> I agree with the conclusions in the JBS entry and this fix looks good,
> StefanJ
> 

Looks good. If you need a sponsor to push the change I could do that.

Thomas



More information about the hotspot-gc-dev mailing list