Author: Remi Meier <remi.me...@inf.ethz.ch> Branch: card-marking Changeset: r1220:e1ac75ed3871 Date: 2014-05-20 15:41 +0200 http://bitbucket.org/pypy/stmgc/changeset/e1ac75ed3871/
Log: clean cards on abort diff --git a/c7/stm/nursery.c b/c7/stm/nursery.c --- a/c7/stm/nursery.c +++ b/c7/stm/nursery.c @@ -359,6 +359,12 @@ } tree_clear(pseg->nursery_objects_shadows); + + if (STM_PSEGMENT->old_objects_with_cards) { + LIST_FOREACH_R(STM_PSEGMENT->old_objects_with_cards, object_t * /*item*/, + _reset_cards(item)); + } + return nursery_used; } diff --git a/c7/test/test_card_marking.py b/c7/test/test_card_marking.py --- a/c7/test/test_card_marking.py +++ b/c7/test/test_card_marking.py @@ -106,10 +106,6 @@ assert not stm_was_written(o) assert stm_was_written_card(o) - print modified_old_objects() - print objects_pointing_to_nursery() - print old_objects_with_cards() - self.push_root(o) stm_minor_collect() o = self.pop_root() @@ -117,3 +113,34 @@ assert not is_in_nursery(stm_get_ref(o, 199)) assert not is_in_nursery(stm_get_ref(o, 1)) assert stm_get_ref(o, 100) == e # not traced + + def test_abort_cleanup(self): + o = stm_allocate_old_refs(200, True) + self.start_transaction() + stm_minor_collect() + + p = stm_allocate_refs(64) + d = stm_allocate(64) + e = stm_allocate(64) + stm_set_ref(o, 199, p, True) + stm_set_ref(o, 1, d, True) + stm_set_ref(p, 1, e) + + self.abort_transaction() + + assert not modified_old_objects() + assert not objects_pointing_to_nursery() + assert not old_objects_with_cards() + + self.start_transaction() + d = stm_allocate(64) + e = stm_allocate(64) + lib._set_ptr(o, 199, d) # no barrier + stm_set_ref(o, 1, e, True) # card barrier + + self.push_root(o) + stm_minor_collect() + o = self.pop_root() + + assert not is_in_nursery(stm_get_ref(o, 1)) + assert is_in_nursery(stm_get_ref(o, 199)) # not traced _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit