comparison src/share/vm/gc_implementation/g1/heapRegion.hpp @ 3317:063382f9b575

7035144: G1: nightly failure: Non-dirty cards in region that should be dirty (failures still exist...) Summary: We should only undirty cards after we decide that they are not on a young region, not before. The fix also includes improvements to the verify_dirty_region() method which print out which cards were not found dirty. Reviewed-by: johnc, brutisso
author tonyp
date Fri, 29 Apr 2011 14:59:04 -0400
parents 371bbc844bf1
children c3f1170908be
comparison
equal deleted inserted replaced
3316:cd8e33b2a8ad 3317:063382f9b575
582 // Allows logical separation between objects allocated before and after. 582 // Allows logical separation between objects allocated before and after.
583 void save_marks(); 583 void save_marks();
584 584
585 // Reset HR stuff to default values. 585 // Reset HR stuff to default values.
586 void hr_clear(bool par, bool clear_space); 586 void hr_clear(bool par, bool clear_space);
587 void par_clear();
587 588
588 void initialize(MemRegion mr, bool clear_space, bool mangle_space); 589 void initialize(MemRegion mr, bool clear_space, bool mangle_space);
589 590
590 // Get the start of the unmarked area in this region. 591 // Get the start of the unmarked area in this region.
591 HeapWord* prev_top_at_mark_start() const { return _prev_top_at_mark_start; } 592 HeapWord* prev_top_at_mark_start() const { return _prev_top_at_mark_start; }
800 // "cl->abort()".) Return of "NULL" indicates that the iteration 801 // "cl->abort()".) Return of "NULL" indicates that the iteration
801 // completed. 802 // completed.
802 HeapWord* 803 HeapWord*
803 object_iterate_mem_careful(MemRegion mr, ObjectClosure* cl); 804 object_iterate_mem_careful(MemRegion mr, ObjectClosure* cl);
804 805
805 // In this version - if filter_young is true and the region 806 // filter_young: if true and the region is a young region then we
806 // is a young region then we skip the iteration. 807 // skip the iteration.
808 // card_ptr: if not NULL, and we decide that the card is not young
809 // and we iterate over it, we'll clean the card before we start the
810 // iteration.
807 HeapWord* 811 HeapWord*
808 oops_on_card_seq_iterate_careful(MemRegion mr, 812 oops_on_card_seq_iterate_careful(MemRegion mr,
809 FilterOutOfRegionClosure* cl, 813 FilterOutOfRegionClosure* cl,
810 bool filter_young); 814 bool filter_young,
815 jbyte* card_ptr);
811 816
812 // A version of block start that is guaranteed to find *some* block 817 // A version of block start that is guaranteed to find *some* block
813 // boundary at or before "p", but does not object iteration, and may 818 // boundary at or before "p", but does not object iteration, and may
814 // therefore be used safely when the heap is unparseable. 819 // therefore be used safely when the heap is unparseable.
815 HeapWord* block_start_careful(const void* p) const { 820 HeapWord* block_start_careful(const void* p) const {