hotspot/src/share/vm/gc/g1/g1RemSet.cpp
changeset 42588 d628ae4e12a2
parent 41313 6593aed45a67
child 42589 037b433e8069
equal deleted inserted replaced
42587:80c66fce4b3b 42588:d628ae4e12a2
   673     r->oops_on_card_seq_iterate_careful(dirtyRegion,
   673     r->oops_on_card_seq_iterate_careful(dirtyRegion,
   674                                         &filter_then_update_rs_oop_cl,
   674                                         &filter_then_update_rs_oop_cl,
   675                                         card_ptr);
   675                                         card_ptr);
   676 
   676 
   677   // If unable to process the card then we encountered an unparsable
   677   // If unable to process the card then we encountered an unparsable
   678   // part of the heap (e.g. a partially allocated object).  Redirty
   678   // part of the heap (e.g. a partially allocated object) while
   679   // and re-enqueue: if we put off the card until a GC pause, then the
   679   // processing a stale card.  Despite the card being stale, redirty
   680   // allocation will have completed.
   680   // and re-enqueue, because we've already cleaned the card.  Without
       
   681   // this we could incorrectly discard a non-stale card.
   681   if (!card_processed) {
   682   if (!card_processed) {
   682     assert(!_g1->is_gc_active(), "Unparsable heap during GC");
   683     assert(!_g1->is_gc_active(), "Unparsable heap during GC");
   683     // The card might have gotten re-dirtied and re-enqueued while we
   684     // The card might have gotten re-dirtied and re-enqueued while we
   684     // worked.  (In fact, it's pretty likely.)
   685     // worked.  (In fact, it's pretty likely.)
   685     if (*card_ptr != CardTableModRefBS::dirty_card_val()) {
   686     if (*card_ptr != CardTableModRefBS::dirty_card_val()) {