Skip to content

Commit 28a27a4

Browse files
fixing a bug in card mark stealing (#118009)
Backport of #117968 to release/8.0-staging
1 parent 435981f commit 28a27a4

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

src/coreclr/gc/gc.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41060,10 +41060,13 @@ BOOL gc_heap::card_transition (uint8_t* po, uint8_t* end, size_t card_word_end,
4106041060
//dprintf(3,(" Clearing cards [%zx, %zx[ ",
4106141061
dprintf(3,(" CC [%zx, %zx[ ",
4106241062
(size_t)card_address(card), (size_t)po));
41063-
clear_cards (card, card_of(po));
41064-
n_card_set -= (card_of (po) - card);
41065-
n_cards_cleared += (card_of (po) - card);
41066-
41063+
uint8_t* card_clearing_limit = po;
41064+
#ifdef FEATURE_CARD_MARKING_STEALING
41065+
card_clearing_limit = min (limit, po);
41066+
#endif // FEATURE_CARD_MARKING_STEALING
41067+
clear_cards (card, card_of (card_clearing_limit));
41068+
n_card_set -= (card_of (card_clearing_limit) - card);
41069+
n_cards_cleared += (card_of (card_clearing_limit) - card);
4106741070
}
4106841071
n_eph +=cg_pointers_found;
4106941072
cg_pointers_found = 0;

0 commit comments

Comments
 (0)