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