Author: Maciej Fijalkowski <fij...@gmail.com> Branch: gc-minimark-pinning Changeset: r54338:0ac3b06d13d8 Date: 2012-04-13 17:23 +0200 http://bitbucket.org/pypy/pypy/changeset/0ac3b06d13d8/
Log: rpython fixes and transformed test diff --git a/pypy/rpython/memory/gc/minimark.py b/pypy/rpython/memory/gc/minimark.py --- a/pypy/rpython/memory/gc/minimark.py +++ b/pypy/rpython/memory/gc/minimark.py @@ -247,8 +247,6 @@ self.nursery_top = NULL self.debug_tiny_nursery = -1 self.debug_rotating_nurseries = None - self.surviving_pinned_objects = NULL - self.nursery_barriers = NULL # # The ArenaCollection() handles the nonmovable objects allocation. if ArenaCollectionClass is None: @@ -452,7 +450,7 @@ def debug_rotate_nursery(self): if self.debug_rotating_nurseries is not None: - ll_assert(self.nursery_barriers.empty(), "non empty nursery barriers with rotating nursery") + ll_assert(not self.nursery_barriers.non_empty(), "non empty nursery barriers with rotating nursery") debug_start("gc-debug") oldnurs = self.nursery llarena.arena_protect(oldnurs, self._nursery_memory_size(), True) @@ -1339,7 +1337,6 @@ nursery_barriers.append(next) llarena.arena_reset(prev, self.nursery_top - prev, 2) self.surviving_pinned_objects.delete() - self.surviving_pinned_objects = NULL self.nursery_barriers = nursery_barriers self.debug_rotate_nursery() self.nursery_free = self.nursery diff --git a/pypy/rpython/memory/test/test_transformed_gc.py b/pypy/rpython/memory/test/test_transformed_gc.py --- a/pypy/rpython/memory/test/test_transformed_gc.py +++ b/pypy/rpython/memory/test/test_transformed_gc.py @@ -43,6 +43,7 @@ gcpolicy = None GC_CAN_MOVE = False GC_CAN_MALLOC_NONMOVABLE = True + GC_CAN_ALWAYS_PIN = False taggedpointers = False def setup_class(cls): @@ -726,6 +727,28 @@ res = fn([]) assert res == ord('y') + def define_pinning(cls): + def f(i, j): + s = str(i) + if not rgc.can_move(s): + return 13 + sum = 0 + with rgc.pinned_object(s): + sum += int(rgc.can_move(s)) + sum += 10 * int(rgc.can_move(s)) + return sum + return f + + def test_pinning(self): + res = self.runner("pinning")([10, 0]) + if not self.GC_CAN_MOVE: + assert res == 13 + elif self.GC_CAN_ALWAYS_PIN: + assert res == 10 + else: + assert res == 11 or res == 13 # sometimes fresh objs can't move + + class GenericMovingGCTests(GenericGCTests): GC_CAN_MOVE = True GC_CAN_MALLOC_NONMOVABLE = False @@ -1273,6 +1296,7 @@ class TestMiniMarkGC(TestHybridGC): gcname = "minimark" GC_CAN_TEST_ID = True + GC_CAN_ALWAYS_PIN = True class gcpolicy(gc.FrameworkGcPolicy): class transformerclass(framework.FrameworkGCTransformer): _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit