diff --git a/src/coreclr/gc/gc.cpp b/src/coreclr/gc/gc.cpp index c0086bed2f10f0..74143fc8df86de 100644 --- a/src/coreclr/gc/gc.cpp +++ b/src/coreclr/gc/gc.cpp @@ -41060,10 +41060,13 @@ BOOL gc_heap::card_transition (uint8_t* po, uint8_t* end, size_t card_word_end, //dprintf(3,(" Clearing cards [%zx, %zx[ ", dprintf(3,(" CC [%zx, %zx[ ", (size_t)card_address(card), (size_t)po)); - clear_cards (card, card_of(po)); - n_card_set -= (card_of (po) - card); - n_cards_cleared += (card_of (po) - card); - + uint8_t* card_clearing_limit = po; +#ifdef FEATURE_CARD_MARKING_STEALING + card_clearing_limit = min (limit, po); +#endif // FEATURE_CARD_MARKING_STEALING + clear_cards (card, card_of (card_clearing_limit)); + n_card_set -= (card_of (card_clearing_limit) - card); + n_cards_cleared += (card_of (card_clearing_limit) - card); } n_eph +=cg_pointers_found; cg_pointers_found = 0;