< prev index next >
src/share/vm/gc/g1/g1CollectedHeap.cpp
Print this page
rev 10742 : Make fields used in lock-free algorithms volatile
@@ -94,11 +94,11 @@
class RefineCardTableEntryClosure: public CardTableEntryClosure {
bool _concurrent;
public:
RefineCardTableEntryClosure() : _concurrent(true) { }
- bool do_card_ptr(jbyte* card_ptr, uint worker_i) {
+ bool do_card_ptr(volatile jbyte* card_ptr, uint worker_i) {
bool oops_into_cset = G1CollectedHeap::heap()->g1_rem_set()->refine_card(card_ptr, worker_i, false);
// This path is executed by the concurrent refine or mutator threads,
// concurrently, and so we do not care if card_ptr contains references
// that point into the collection set.
assert(!oops_into_cset, "should be");
@@ -119,11 +119,11 @@
private:
size_t _num_dirtied;
G1CollectedHeap* _g1h;
G1SATBCardTableLoggingModRefBS* _g1_bs;
- HeapRegion* region_for_card(jbyte* card_ptr) const {
+ HeapRegion* region_for_card(volatile jbyte* card_ptr) const {
return _g1h->heap_region_containing(_g1_bs->addr_for(card_ptr));
}
bool will_become_free(HeapRegion* hr) const {
// A region will be freed by free_collection_set if the region is in the
@@ -133,11 +133,11 @@
public:
RedirtyLoggedCardTableEntryClosure(G1CollectedHeap* g1h) : CardTableEntryClosure(),
_num_dirtied(0), _g1h(g1h), _g1_bs(g1h->g1_barrier_set()) { }
- bool do_card_ptr(jbyte* card_ptr, uint worker_i) {
+ bool do_card_ptr(volatile jbyte* card_ptr, uint worker_i) {
HeapRegion* hr = region_for_card(card_ptr);
// Should only dirty cards in regions that won't be freed.
if (!will_become_free(hr)) {
*card_ptr = CardTableModRefBS::dirty_card_val();
@@ -3015,11 +3015,11 @@
"Found a not-small remembered set here. This is inconsistent with previous assumptions.");
G1SATBCardTableLoggingModRefBS* bs = g1h->g1_barrier_set();
HeapRegionRemSetIterator hrrs(r->rem_set());
size_t card_index;
while (hrrs.has_next(card_index)) {
- jbyte* card_ptr = (jbyte*)bs->byte_for_index(card_index);
+ volatile jbyte* card_ptr = (volatile jbyte*)bs->byte_for_index(card_index);
// The remembered set might contain references to already freed
// regions. Filter out such entries to avoid failing card table
// verification.
if (g1h->is_in_closed_subset(bs->addr_for(card_ptr))) {
if (*card_ptr != CardTableModRefBS::dirty_card_val()) {
< prev index next >