6723570: G1: assertion failure: p == current_top or oop(p)->is_oop(),"p is not a block start" (revisited!)
Fixed the incorrect assigment to G1OffsetTableContigSpace::_gc_time_stamp. Also added a little more paranoia to operations on a global timestamp. Reviewed-by: tonyp
This commit is contained in:
parent
07198ddeda
commit
2703662478
@ -2279,7 +2279,8 @@ G1CollectedHeap::do_collection_pause_at_safepoint(HeapRegion* popular_region) {
|
||||
assert(Thread::current() == VMThread::vm_thread(), "should be in vm thread");
|
||||
guarantee(!is_gc_active(), "collection is not reentrant");
|
||||
assert(regions_accounted_for(), "Region leakage!");
|
||||
++_gc_time_stamp;
|
||||
|
||||
increment_gc_time_stamp();
|
||||
|
||||
if (g1_policy()->in_young_gc_mode()) {
|
||||
assert(check_young_list_well_formed(),
|
||||
|
@ -247,7 +247,7 @@ private:
|
||||
NumberSeq _pop_obj_rc_at_copy;
|
||||
void print_popularity_summary_info() const;
|
||||
|
||||
unsigned _gc_time_stamp;
|
||||
volatile unsigned _gc_time_stamp;
|
||||
|
||||
size_t* _surviving_young_words;
|
||||
|
||||
@ -653,6 +653,12 @@ public:
|
||||
|
||||
void reset_gc_time_stamp() {
|
||||
_gc_time_stamp = 0;
|
||||
OrderAccess::fence();
|
||||
}
|
||||
|
||||
void increment_gc_time_stamp() {
|
||||
++_gc_time_stamp;
|
||||
OrderAccess::fence();
|
||||
}
|
||||
|
||||
void iterate_dirty_card_closure(bool concurrent, int worker_i);
|
||||
|
@ -793,8 +793,8 @@ void G1OffsetTableContigSpace::set_saved_mark() {
|
||||
// will pick up the right saved_mark_word() as the high water mark
|
||||
// of the region. Either way, the behaviour will be correct.
|
||||
ContiguousSpace::set_saved_mark();
|
||||
OrderAccess::release_store_ptr((volatile intptr_t*) &_gc_time_stamp,
|
||||
(intptr_t) curr_gc_time_stamp);
|
||||
_gc_time_stamp = curr_gc_time_stamp;
|
||||
OrderAccess::fence();
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user