Projects
openEuler:24.03:SP1:Everything
openjdk-1.8.0
_service:tar_scm:8164948.patch
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:8164948.patch of Package openjdk-1.8.0
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 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 index 14b5749f9..2f17dce61 100644 --- 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 index 14673df74..49c231d89 100644 --- 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); } -- 2.19.0
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2