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

Nick Gasson nick.gasson at arm.com
Tue Dec 17 06:22:51 UTC 2019


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).


Thanks,
Nick


More information about the hotspot-gc-dev mailing list