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:
parent
4dc240f785
commit
f05640eb98
@ -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) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user