Author: Armin Rigo <ar...@tunes.org>
Branch: 
Changeset: r231:0484208e300e
Date: 2013-06-21 17:32 +0200
http://bitbucket.org/pypy/stmgc/changeset/0484208e300e/

Log:    More asserts. The next issue is that we need to reset
        GCFLAG_VISITED on stubs (and free unused stubs, too).

diff --git a/c4/gcpage.c b/c4/gcpage.c
--- a/c4/gcpage.c
+++ b/c4/gcpage.c
@@ -198,6 +198,8 @@
     if (obj->h_tid & GCFLAG_VISITED) {
         fprintf(stderr, "[already visited: %p]\n", obj);
         assert(obj == *pobj);
+        assert((obj->h_revision & 3) ||   /* either odd, or stub */
+               (obj->h_tid & GCFLAG_PRIVATE_FROM_PROTECTED));
         return;    /* already seen */
     }
 
@@ -248,6 +250,7 @@
         if (!(B->h_tid & GCFLAG_PUBLIC)) {
             /* a regular private_from_protected object with a backup copy B */
             assert(B->h_tid & GCFLAG_BACKUP_COPY);
+            assert(B->h_revision & 1);
             B->h_tid |= GCFLAG_VISITED;
         }
         else {
@@ -285,8 +288,8 @@
     for (; pobj != pend; pobj++) {
         obj = *pobj;
         assert(obj->h_tid & GCFLAG_PREBUILT_ORIGINAL);
-        assert(obj->h_tid & GCFLAG_VISITED);
-        assert((obj->h_revision & 1) == 0);   /* "is a pointer" */
+        obj->h_tid &= ~GCFLAG_VISITED;
+        assert(IS_POINTER(obj->h_revision));
         visit((gcptr *)&obj->h_revision);
     }
 }
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to