[pypy-commit] pypy stmgc-c7: Test and fix

arigo noreply at buildbot.pypy.org
Mon Jun 30 15:32:08 CEST 2014


Author: Armin Rigo <arigo at tunes.org>
Branch: stmgc-c7
Changeset: r72287:6e6305a37a7b
Date: 2014-06-30 15:29 +0200
http://bitbucket.org/pypy/pypy/changeset/6e6305a37a7b/

Log:	Test and fix

diff --git a/rpython/memory/gctransform/stmframework.py b/rpython/memory/gctransform/stmframework.py
--- a/rpython/memory/gctransform/stmframework.py
+++ b/rpython/memory/gctransform/stmframework.py
@@ -34,8 +34,11 @@
                   annmodel.s_None))
         #
         def pypy_stmcb_trace_cards(obj, visit_fn, start, stop):
-            if not gc.has_gcptr_in_varsize(gc.get_type_id(obj)):
+            typeid = gc.get_type_id(obj)
+            if not gc.has_gcptr_in_varsize(typeid):
                 return    # there are cards, but they don't need tracing
+            length = (obj + gc.varsize_offset_to_length(typeid)).signed[0]
+            stop = min(stop, length)
             gc.trace_partial(obj, start, stop, invokecallback, visit_fn)
         pypy_stmcb_trace_cards.c_name = "pypy_stmcb_trace_cards"
         self.autoregister_ptrs.append(
diff --git a/rpython/translator/stm/test/test_ztranslated.py b/rpython/translator/stm/test/test_ztranslated.py
--- a/rpython/translator/stm/test/test_ztranslated.py
+++ b/rpython/translator/stm/test/test_ztranslated.py
@@ -453,12 +453,15 @@
 
     def test_stm_write_card(self):
         LST = lltype.GcArray(lltype.Signed)
-        lst = lltype.malloc(LST, 100, immortal=True)
+        lst = lltype.malloc(LST, 1000, immortal=True)
+        LST2 = lltype.GcArray(lltype.Ptr(LST))
+        lst2 = lltype.malloc(LST2, 1000, immortal=True)
         def main(argv):
             lst[42] = 43
+            lst2[999] = lst
             llop.stm_commit_if_not_atomic(lltype.Void)
             llop.stm_start_inevitable_if_not_atomic(lltype.Void)
-            print 'did not crash', lst[42]
+            print 'did not crash', lst2[999][42]
             return 0
 
         t, cbuilder = self.compile(main)


More information about the pypy-commit mailing list