equal
deleted
inserted
replaced
3523 G1SATBCardTableLoggingModRefBS* bs = g1h->g1_barrier_set(); |
3523 G1SATBCardTableLoggingModRefBS* bs = g1h->g1_barrier_set(); |
3524 HeapRegionRemSetIterator hrrs(r->rem_set()); |
3524 HeapRegionRemSetIterator hrrs(r->rem_set()); |
3525 size_t card_index; |
3525 size_t card_index; |
3526 while (hrrs.has_next(card_index)) { |
3526 while (hrrs.has_next(card_index)) { |
3527 jbyte* card_ptr = (jbyte*)bs->byte_for_index(card_index); |
3527 jbyte* card_ptr = (jbyte*)bs->byte_for_index(card_index); |
3528 if (*card_ptr != CardTableModRefBS::dirty_card_val()) { |
3528 // The remembered set might contain references to already freed |
3529 *card_ptr = CardTableModRefBS::dirty_card_val(); |
3529 // regions. Filter out such entries to avoid failing card table |
3530 _dcq.enqueue(card_ptr); |
3530 // verification. |
|
3531 if (!g1h->heap_region_containing(bs->addr_for(card_ptr))->is_free()) { |
|
3532 if (*card_ptr != CardTableModRefBS::dirty_card_val()) { |
|
3533 *card_ptr = CardTableModRefBS::dirty_card_val(); |
|
3534 _dcq.enqueue(card_ptr); |
|
3535 } |
3531 } |
3536 } |
3532 } |
3537 } |
3533 r->rem_set()->clear_locked(); |
3538 r->rem_set()->clear_locked(); |
3534 } |
3539 } |
3535 assert(r->rem_set()->is_empty(), "At this point any humongous candidate remembered set must be empty."); |
3540 assert(r->rem_set()->is_empty(), "At this point any humongous candidate remembered set must be empty."); |