[pypy-commit] stmgc copy-over-original2: More fixes.

arigo noreply at buildbot.pypy.org
Fri Jul 26 10:02:51 CEST 2013


Author: Armin Rigo <arigo at tunes.org>
Branch: copy-over-original2
Changeset: r446:0d0ab39425d7
Date: 2013-07-26 10:02 +0200
http://bitbucket.org/pypy/stmgc/changeset/0d0ab39425d7/

Log:	More fixes.

diff --git a/c4/gcpage.c b/c4/gcpage.c
--- a/c4/gcpage.c
+++ b/c4/gcpage.c
@@ -241,8 +241,10 @@
     size_t objsize;
     if (obj->h_tid & GCFLAG_STUB)
         objsize = sizeof(struct stm_stub_s);
-    else
+    else {
         objsize = stmgc_size(obj);
+        assert(objsize > sizeof(struct stm_stub_s) - WORD);
+    }
     dprintf(("copy %p over %p (%ld bytes)\n", obj, id_copy, objsize));
     memcpy(id_copy + 1, obj + 1, objsize - sizeof(struct stm_object_s));
 
diff --git a/c4/test/support.py b/c4/test/support.py
--- a/c4/test/support.py
+++ b/c4/test/support.py
@@ -586,7 +586,7 @@
 def delegate(p1, p2):
     assert classify(p1) == "public"
     assert classify(p2) == "public"
-    assert lib.gettid(p1) != 42 and lib.gettid(p2) == lib.gettid(p1)
+    assert lib.gettid(p1) != 42 + HDR and lib.gettid(p2) == lib.gettid(p1)
     p1.h_revision = ffi.cast("revision_t", p2)
     p1.h_tid |= GCFLAG_PUBLIC_TO_PRIVATE
     if p1.h_tid & GCFLAG_PREBUILT_ORIGINAL:
diff --git a/c4/test/test_gcpage.py b/c4/test/test_gcpage.py
--- a/c4/test/test_gcpage.py
+++ b/c4/test/test_gcpage.py
@@ -201,8 +201,8 @@
     assert p3 == lib.stm_write_barrier(p1)
 
 def test_new_version_id_alive():
-    p1 = oalloc(HDR); make_public(p1)
-    p2 = oalloc(HDR); make_public(p2)
+    p1 = oalloc(HDR + WORD); make_public(p1)
+    p2 = oalloc(HDR + WORD); make_public(p2)
     delegate(p1, p2)
     lib.stm_push_root(p1)
     major_collect()
@@ -237,10 +237,10 @@
 
 def test_new_version_kill_intermediate_non_root():
     p1 = oalloc_refs(1); make_public(p1)
-    p2 = oalloc(HDR);    make_public(p2)
-    p3 = oalloc(HDR);    make_public(p3)
-    p4 = oalloc(HDR);    make_public(p4)
-    p5 = oalloc(HDR);    make_public(p5)
+    p2 = oalloc(HDR + WORD); make_public(p2)
+    p3 = oalloc(HDR + WORD); make_public(p3)
+    p4 = oalloc(HDR + WORD); make_public(p4)
+    p5 = oalloc(HDR + WORD); make_public(p5)
     delegate(p2, p3)
     delegate(p3, p4)
     delegate(p4, p5)
@@ -295,9 +295,9 @@
     check_prebuilt(p1)
 
 def test_prebuilt_version_2():
-    p1 = lib.pseudoprebuilt(HDR, 42 + HDR)
-    p2 = oalloc(HDR); make_public(p2)
-    p3 = oalloc(HDR); make_public(p3)
+    p1 = lib.pseudoprebuilt(HDR + WORD, 42 + HDR + WORD)
+    p2 = oalloc(HDR + WORD); make_public(p2)
+    p3 = oalloc(HDR + WORD); make_public(p3)
     delegate(p1, p2)
     delegate(p2, p3)
     major_collect()
@@ -306,9 +306,9 @@
     check_free_old(p3)
 
 def test_prebuilt_with_hash():
-    p1 = lib.pseudoprebuilt_with_hash(HDR, 42 + HDR, 99)
-    p2 = oalloc(HDR); make_public(p2)
-    p3 = oalloc(HDR); make_public(p3)
+    p1 = lib.pseudoprebuilt_with_hash(HDR + WORD, 42 + HDR + WORD, 99)
+    p2 = oalloc(HDR + WORD); make_public(p2)
+    p3 = oalloc(HDR + WORD); make_public(p3)
     delegate(p1, p2)
     delegate(p2, p3)
     major_collect()


More information about the pypy-commit mailing list