Skip to content

Commit e60ce68

Browse files
committed
refactoring, additional verification
1 parent 283e486 commit e60ce68

File tree

4 files changed

+19
-13
lines changed

4 files changed

+19
-13
lines changed

src/hotspot/share/gc/g1/g1CollectedHeap.inline.hpp

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -269,16 +269,15 @@ inline void G1CollectedHeap::pin_object(JavaThread* thread, oop obj) {
269269
HeapRegion* r = heap_region_containing(obj);
270270
uint obj_region_idx = r->hrm_index();
271271

272-
uint cached_idx = G1ThreadLocalData::cached_pinned_region_idx(thread);
273-
if (cached_idx == obj_region_idx) {
272+
uint cache_region_idx = G1ThreadLocalData::cached_pinned_region_idx(thread);
273+
if (cache_region_idx == obj_region_idx) {
274274
G1ThreadLocalData::inc_cached_pin_count(thread);
275275
} else {
276276
// Flush old.
277-
size_t cached_pin_count = G1ThreadLocalData::cached_pin_count(thread);
278-
if (cached_pin_count != 0) {
279-
region_at(cached_idx)->add_pinned_object_count(cached_pin_count);
277+
size_t cache_pin_count = G1ThreadLocalData::get_and_set_pin_cache(thread, obj_region_idx, (size_t)1);
278+
if (cache_pin_count != 0) {
279+
region_at(cache_region_idx)->add_pinned_object_count(cache_pin_count);
280280
}
281-
G1ThreadLocalData::get_and_set_pin_cache(thread, obj_region_idx, (size_t)1);
282281
}
283282
}
284283

@@ -288,16 +287,15 @@ inline void G1CollectedHeap::unpin_object(JavaThread* thread, oop obj) {
288287
HeapRegion* r = heap_region_containing(obj);
289288
uint obj_region_idx = r->hrm_index();
290289

291-
uint cached_idx = G1ThreadLocalData::cached_pinned_region_idx(thread);
292-
if (cached_idx == obj_region_idx) {
290+
uint cache_region_idx = G1ThreadLocalData::cached_pinned_region_idx(thread);
291+
if (cache_region_idx == obj_region_idx) {
293292
G1ThreadLocalData::dec_cached_pin_count(thread);
294293
} else {
295294
// Flush old.
296-
size_t cached_pin_count = G1ThreadLocalData::cached_pin_count(thread);
297-
if (cached_pin_count != 0) {
298-
region_at(cached_idx)->add_pinned_object_count(cached_pin_count);
295+
size_t cache_pin_count = G1ThreadLocalData::get_and_set_pin_cache(thread, obj_region_idx, ~(size_t)0);
296+
if (cache_pin_count != 0) {
297+
region_at(cache_region_idx)->add_pinned_object_count(cache_pin_count);
299298
}
300-
G1ThreadLocalData::get_and_set_pin_cache(thread, obj_region_idx, ~(size_t)0);
301299
}
302300
}
303301

src/hotspot/share/gc/g1/g1ThreadLocalData.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,11 @@ class G1ThreadLocalData {
9999
return data(thread)->_pin_cache.region_idx();
100100
}
101101

102+
#ifdef ASSERT
102103
static size_t cached_pin_count(Thread* thread) {
103104
return data(thread)->_pin_cache.count();
104105
}
106+
#endif
105107

106108
static void inc_cached_pin_count(Thread* thread) {
107109
data(thread)->_pin_cache.inc_count();

src/hotspot/share/gc/g1/g1YoungCollector.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1087,6 +1087,12 @@ void G1YoungCollector::collect() {
10871087

10881088
pre_evacuate_collection_set(jtm.evacuation_info());
10891089

1090+
#ifdef ASSERT
1091+
for (JavaThreadIteratorWithHandle jtiwh; JavaThread *thread = jtiwh.next(); ) {
1092+
assert(G1ThreadLocalData::cached_pin_count(thread) == 0, "must be flushed");
1093+
}
1094+
#endif
1095+
10901096
G1ParScanThreadStateSet per_thread_states(_g1h,
10911097
workers()->active_workers(),
10921098
collection_set(),

src/hotspot/share/gc/g1/g1YoungGCPreEvacuateTasks.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ class G1PreEvacuateCollectionSetBatchTask::NonJavaThreadFlushLogs : public G1Abs
140140
G1DirtyCardQueueSet& qset = G1BarrierSet::dirty_card_queue_set();
141141
_refinement_stats += qset.concatenate_log_and_stats(thread);
142142

143-
assert(G1ThreadLocalData::cached_pin_count(thread) == 0, "NonJava thread pinned Java objects");
143+
assert(G1ThreadLocalData::cached_pin_count(thread) == 0, "NonJava thread has pinned Java objects");
144144
}
145145
} _tc;
146146

0 commit comments

Comments
 (0)