2021-02-02 11:40:07 +08:00
|
|
|
From 82736f1e847b8de654f1d2c4c2a7de942a9ba132 Mon Sep 17 00:00:00 2001
|
|
|
|
|
Date: Fri, 22 Jan 2021 15:24:25 +0800
|
|
|
|
|
Subject: 8164948: Initializing stores of HeapRegions are not
|
|
|
|
|
ordered with regards to their use in G1ConcurrentMark
|
2020-01-20 12:09:52 +08:00
|
|
|
|
|
|
|
|
Summary: Initializing stores of HeapRegions are not ordered with regards to their use in G1ConcurrentMark
|
|
|
|
|
LLT:
|
|
|
|
|
bug link: https://bugs.openjdk.java.net/browse/JDK-8164948
|
|
|
|
|
---
|
|
|
|
|
hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp | 2 ++
|
|
|
|
|
hotspot/src/share/vm/gc_implementation/g1/heapRegionManager.cpp | 1 +
|
|
|
|
|
2 files changed, 3 insertions(+)
|
|
|
|
|
|
|
|
|
|
diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp
|
2021-02-02 11:40:07 +08:00
|
|
|
index 14b5749f9..2f17dce61 100644
|
2020-01-20 12:09:52 +08:00
|
|
|
--- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp
|
|
|
|
|
+++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp
|
|
|
|
|
@@ -3006,6 +3006,8 @@ ConcurrentMark::claim_region(uint worker_id) {
|
|
|
|
|
// iterations) but it should not introduce and correctness issues.
|
|
|
|
|
HeapRegion* curr_region = _g1h->heap_region_containing_raw(finger);
|
|
|
|
|
|
|
|
|
|
+ // Make sure that the reads below do not float before loading curr_region.
|
|
|
|
|
+ OrderAccess::loadload();
|
|
|
|
|
// Above heap_region_containing_raw may return NULL as we always scan claim
|
|
|
|
|
// until the end of the heap. In this case, just jump to the next region.
|
|
|
|
|
HeapWord* end = curr_region != NULL ? curr_region->end() : finger + HeapRegion::GrainWords;
|
|
|
|
|
diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionManager.cpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionManager.cpp
|
2021-02-02 11:40:07 +08:00
|
|
|
index 14673df74..49c231d89 100644
|
2020-01-20 12:09:52 +08:00
|
|
|
--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionManager.cpp
|
|
|
|
|
+++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionManager.cpp
|
|
|
|
|
@@ -124,6 +124,7 @@ void HeapRegionManager::make_regions_available(uint start, uint num_regions) {
|
|
|
|
|
for (uint i = start; i < start + num_regions; i++) {
|
|
|
|
|
if (_regions.get_by_index(i) == NULL) {
|
|
|
|
|
HeapRegion* new_hr = new_heap_region(i);
|
|
|
|
|
+ OrderAccess::storestore();
|
|
|
|
|
_regions.set_by_index(i, new_hr);
|
|
|
|
|
_allocated_heapregions_length = MAX2(_allocated_heapregions_length, i + 1);
|
|
|
|
|
}
|
|
|
|
|
--
|
2021-02-02 11:40:07 +08:00
|
|
|
2.19.0
|
2020-01-20 12:09:52 +08:00
|
|
|
|