[pypy-commit] stmgc card-marking: Call stmcb_get_card_base_itemsize() lazily only if needed
arigo
noreply at buildbot.pypy.org
Mon Jun 30 12:23:50 CEST 2014
Author: Armin Rigo <arigo at tunes.org>
Branch: card-marking
Changeset: r1261:9c17fefa1cc0
Date: 2014-06-30 12:14 +0200
http://bitbucket.org/pypy/stmgc/changeset/9c17fefa1cc0/
Log: Call stmcb_get_card_base_itemsize() lazily only if needed
diff --git a/c7/stm/core.c b/c7/stm/core.c
--- a/c7/stm/core.c
+++ b/c7/stm/core.c
@@ -587,25 +587,29 @@
uintptr_t base_offset;
ssize_t item_size;
bool all_cards_were_cleared = true;
- stmcb_get_card_base_itemsize(realobj, &base_offset, &item_size);
uintptr_t start_card_index = -1;
while (card_index <= last_card_index) {
uintptr_t card_lock_idx = first_card_index + card_index;
uint8_t card_value = write_locks[card_lock_idx];
- OPT_ASSERT(card_value != CARD_MARKED); /* always only MARKED_OLD or CLEAR */
-
if (card_value == CARD_MARKED_OLD) {
- all_cards_were_cleared = false;
write_locks[card_lock_idx] = CARD_CLEAR;
if (start_card_index == -1) { /* first marked card */
start_card_index = card_index;
/* start = (uintptr_t)obj + stmcb_index_to_byte_offset( */
/* realobj, get_card_index_to_index(card_index)); */
+ if (all_cards_were_cleared) {
+ all_cards_were_cleared = false;
+ stmcb_get_card_base_itemsize(realobj, &base_offset,
+ &item_size);
+ }
}
}
+ else {
+ OPT_ASSERT(card_value == CARD_CLEAR);
+ }
if (start_card_index != -1 /* something to copy */
&& (card_value != CARD_MARKED_OLD /* found non-marked card */
More information about the pypy-commit
mailing list