< prev index next >

src/share/vm/gc/g1/g1SATBCardTableModRefBS.cpp

Print this page
rev 10742 : Make fields used in lock-free algorithms volatile

*** 100,113 **** } return true; } void G1SATBCardTableModRefBS::g1_mark_as_young(const MemRegion& mr) { ! jbyte *const first = byte_for(mr.start()); ! jbyte *const last = byte_after(mr.last()); ! memset_with_concurrent_readers(first, g1_young_gen, last - first); } #ifndef PRODUCT void G1SATBCardTableModRefBS::verify_g1_young_region(MemRegion mr) { verify_region(mr, g1_young_gen, true); --- 100,113 ---- } return true; } void G1SATBCardTableModRefBS::g1_mark_as_young(const MemRegion& mr) { ! volatile jbyte *const first = byte_for(mr.start()); ! volatile jbyte *const last = byte_after(mr.last()); ! memset_with_concurrent_readers((jbyte*)first, g1_young_gen, last - first); } #ifndef PRODUCT void G1SATBCardTableModRefBS::verify_g1_young_region(MemRegion mr) { verify_region(mr, g1_young_gen, true);
*** 141,159 **** HeapWord* high_bound = _whole_heap.end(); _cur_covered_regions = 1; _covered[0] = _whole_heap; ! _byte_map = (jbyte*) mapper->reserved().start(); byte_map_base = _byte_map - (uintptr_t(low_bound) >> card_shift); assert(byte_for(low_bound) == &_byte_map[0], "Checking start of map"); assert(byte_for(high_bound-1) <= &_byte_map[_last_valid_index], "Checking end of map"); log_trace(gc, barrier)("G1SATBCardTableModRefBS::G1SATBCardTableModRefBS: "); log_trace(gc, barrier)(" &_byte_map[0]: " INTPTR_FORMAT " &_byte_map[_last_valid_index]: " INTPTR_FORMAT, ! p2i(&_byte_map[0]), p2i(&_byte_map[_last_valid_index])); ! log_trace(gc, barrier)(" byte_map_base: " INTPTR_FORMAT, p2i(byte_map_base)); } void G1SATBCardTableLoggingModRefBS::write_ref_field_work(void* field, oop new_val, --- 141,159 ---- HeapWord* high_bound = _whole_heap.end(); _cur_covered_regions = 1; _covered[0] = _whole_heap; ! _byte_map = (volatile jbyte*) mapper->reserved().start(); byte_map_base = _byte_map - (uintptr_t(low_bound) >> card_shift); assert(byte_for(low_bound) == &_byte_map[0], "Checking start of map"); assert(byte_for(high_bound-1) <= &_byte_map[_last_valid_index], "Checking end of map"); log_trace(gc, barrier)("G1SATBCardTableModRefBS::G1SATBCardTableModRefBS: "); log_trace(gc, barrier)(" &_byte_map[0]: " INTPTR_FORMAT " &_byte_map[_last_valid_index]: " INTPTR_FORMAT, ! p2i((jbyte*)&_byte_map[0]), p2i((jbyte*)&_byte_map[_last_valid_index])); ! log_trace(gc, barrier)(" byte_map_base: " INTPTR_FORMAT, p2i((jbyte*)byte_map_base)); } void G1SATBCardTableLoggingModRefBS::write_ref_field_work(void* field, oop new_val,
*** 178,188 **** } void G1SATBCardTableLoggingModRefBS::invalidate(MemRegion mr, bool whole_heap) { volatile jbyte* byte = byte_for(mr.start()); ! jbyte* last_byte = byte_for(mr.last()); Thread* thr = Thread::current(); if (whole_heap) { while (byte <= last_byte) { *byte = dirty_card; byte++; --- 178,188 ---- } void G1SATBCardTableLoggingModRefBS::invalidate(MemRegion mr, bool whole_heap) { volatile jbyte* byte = byte_for(mr.start()); ! volatile jbyte* last_byte = byte_for(mr.last()); Thread* thr = Thread::current(); if (whole_heap) { while (byte <= last_byte) { *byte = dirty_card; byte++;
< prev index next >