Author: Armin Rigo <[email protected]>
Branch: gc-del
Changeset: r63683:7c88b2c3b7ca
Date: 2013-04-27 13:15 +0200
http://bitbucket.org/pypy/pypy/changeset/7c88b2c3b7ca/

Log:    More fixes

diff --git a/rpython/memory/gc/minimark.py b/rpython/memory/gc/minimark.py
--- a/rpython/memory/gc/minimark.py
+++ b/rpython/memory/gc/minimark.py
@@ -1020,7 +1020,7 @@
         ll_assert(self.header(obj).tid & GCFLAG_CARDS_SET == 0,
                   "unexpected GCFLAG_CARDS_SET")
         # if the GCFLAG_HAS_CARDS is set, check that all bits are zero now
-        if self.has_card(self.header(obj)):
+        if self.header(obj).tid & GCFLAG_HAS_CARDS:
             if self.card_page_indices <= 0:
                 ll_assert(False, "GCFLAG_HAS_CARDS but not using card marking")
                 return
diff --git a/rpython/memory/gc/test/test_direct.py 
b/rpython/memory/gc/test/test_direct.py
--- a/rpython/memory/gc/test/test_direct.py
+++ b/rpython/memory/gc/test/test_direct.py
@@ -421,14 +421,6 @@
         res = self.gc.writebarrier_before_copy(addr_src, addr_dst, 0, 0, 10)
         assert res # we optimized it
         assert hdr_dst.tid & minimark.GCFLAG_TRACK_YOUNG_PTRS == 0 # and we 
copied the flag
-        #
-        hdr_src.tid |= minimark.GCFLAG_TRACK_YOUNG_PTRS
-        hdr_dst.tid |= minimark.GCFLAG_TRACK_YOUNG_PTRS
-        hdr_src.tid |= minimark.GCFLAG_HAS_CARDS
-        hdr_src.tid |= minimark.GCFLAG_CARDS_SET
-        # hdr_dst.tid does not have minimark.GCFLAG_HAS_CARDS
-        res = self.gc.writebarrier_before_copy(addr_src, addr_dst, 0, 0, 10)
-        assert not res # there might be young ptrs, let ll_arraycopy to find 
them
 
     def test_writebarrier_before_copy_preserving_cards(self):
         from rpython.rtyper.lltypesystem import llarena
@@ -466,6 +458,43 @@
     test_writebarrier_before_copy_preserving_cards.GC_PARAMS = {
         "card_page_indices": 4}
 
+    def test_dst_without_cards(self):
+        from rpython.memory.gc import minimark
+        largeobj_size =  self.gc.nonlarge_max + 1
+        self.gc.next_major_collection_threshold = 99999.0
+        p_src = self.malloc(VAR, largeobj_size)
+        p_dst = self.malloc(VAR, largeobj_size)
+        # make them old
+        self.stackroots.append(p_src)
+        self.stackroots.append(p_dst)
+        self.gc.collect()
+        p_dst = self.stackroots.pop()
+        p_src = self.stackroots.pop()
+        #
+        addr_src = llmemory.cast_ptr_to_adr(p_src)
+        addr_dst = llmemory.cast_ptr_to_adr(p_dst)
+        hdr_src = self.gc.header(addr_src)
+        hdr_dst = self.gc.header(addr_dst)
+        #
+        assert hdr_src.tid & minimark.GCFLAG_TRACK_YOUNG_PTRS
+        assert hdr_dst.tid & minimark.GCFLAG_TRACK_YOUNG_PTRS
+        assert hdr_src.tid & minimark.GCFLAG_HAS_CARDS
+        assert not (hdr_src.tid & minimark.GCFLAG_CARDS_SET)
+        hdr_dst.tid &= ~minimark.GCFLAG_HAS_CARDS
+        res = self.gc.writebarrier_before_copy(addr_src, addr_dst, 0, 0, 10)
+        assert res
+        #
+        assert hdr_src.tid & minimark.GCFLAG_TRACK_YOUNG_PTRS
+        assert hdr_dst.tid & minimark.GCFLAG_TRACK_YOUNG_PTRS
+        assert hdr_src.tid & minimark.GCFLAG_HAS_CARDS
+        hdr_src.tid |= minimark.GCFLAG_CARDS_SET
+        hdr_dst.tid &= ~minimark.GCFLAG_HAS_CARDS
+        res = self.gc.writebarrier_before_copy(addr_src, addr_dst, 0, 0, 10)
+        assert not res # there might be young ptrs, let ll_arraycopy find them
+
+    test_dst_without_cards.GC_PARAMS = {
+        "card_page_indices": 4}
+
 
 class TestMiniMarkGCFull(DirectGCTest):
     from rpython.memory.gc.minimark import MiniMarkGC as GCClass
diff --git a/rpython/memory/gc/test/test_inspector.py 
b/rpython/memory/gc/test/test_inspector.py
--- a/rpython/memory/gc/test/test_inspector.py
+++ b/rpython/memory/gc/test/test_inspector.py
@@ -38,9 +38,6 @@
         assert expected == seen
 
 
-class TestHybridGC(InspectorTest):
-    from rpython.memory.gc.hybrid import HybridGC as GCClass
-
 class TestMiniMarkGCSimple(InspectorTest):
     from rpython.memory.gc.minimark import MiniMarkGC as GCClass
     from rpython.memory.gc.minimarktest import SimpleArenaCollection
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to