8035496: G1 ARM: missing remset entry noticed by VerifyAfterGC for vm/gc/concurrent/lp50yp10rp70mr30st0

Release_store used when registering a PerRegionTable. Also reviewed-by: vitalyd@gmail.com

Reviewed-by: jmasa, tschatzl, brutisso
This commit is contained in:
Bertrand Delsart 2014-02-24 12:49:21 +01:00
parent 4dc240f785
commit f05640eb98

View File

@ -497,7 +497,15 @@ void OtherRegionsTable::add_reference(OopOrNarrowOopStar from, uint tid) {
PerRegionTable* first_prt = _fine_grain_regions[ind]; PerRegionTable* first_prt = _fine_grain_regions[ind];
prt->set_collision_list_next(first_prt); prt->set_collision_list_next(first_prt);
_fine_grain_regions[ind] = prt; // The assignment into _fine_grain_regions allows the prt to
// start being used concurrently. In addition to
// collision_list_next which must be visible (else concurrent
// parsing of the list, if any, may fail to see other entries),
// the content of the prt must be visible (else for instance
// some mark bits may not yet seem cleared or a 'later' update
// performed by a concurrent thread could be undone when the
// zeroing becomes visible). This requires store ordering.
OrderAccess::release_store_ptr((volatile PerRegionTable*)&_fine_grain_regions[ind], prt);
_n_fine_entries++; _n_fine_entries++;
if (G1HRRSUseSparseTable) { if (G1HRRSUseSparseTable) {