Author: Armin Rigo <ar...@tunes.org>
Branch: 
Changeset: r332:874251ce1920
Date: 2013-07-01 13:04 +0200
http://bitbucket.org/pypy/stmgc/changeset/874251ce1920/

Log:    More fixes

diff --git a/c4/gcpage.c b/c4/gcpage.c
--- a/c4/gcpage.c
+++ b/c4/gcpage.c
@@ -219,21 +219,14 @@
         return;
 
  restart:
-    if (obj->h_tid & GCFLAG_VISITED) {
-        dprintf(("[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 */
-    }
-
     if (obj->h_revision & 1) {
         assert(!(obj->h_tid & GCFLAG_PRIVATE_FROM_PROTECTED));
-        obj->h_tid &= ~GCFLAG_PUBLIC_TO_PRIVATE;  /* see also fix_outdated() */
-
-        obj->h_tid |= GCFLAG_VISITED;
         assert(!(obj->h_tid & GCFLAG_STUB));
-        gcptrlist_insert(&objects_to_trace, obj);
+        if (!(obj->h_tid & GCFLAG_VISITED)) {
+            obj->h_tid &= ~GCFLAG_PUBLIC_TO_PRIVATE;  /* see fix_outdated() */
+            obj->h_tid |= GCFLAG_VISITED;
+            gcptrlist_insert(&objects_to_trace, obj);
+        }
     }
     else if (obj->h_tid & GCFLAG_PUBLIC) {
         /* h_revision is a ptr: we have a more recent version */
@@ -270,6 +263,13 @@
         *pobj = obj;
         goto restart;
     }
+    else if (obj->h_tid & GCFLAG_VISITED) {
+        dprintf(("[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 */
+    }
     else {
         assert(obj->h_tid & GCFLAG_PRIVATE_FROM_PROTECTED);
         gcptr B = (gcptr)obj->h_revision;
diff --git a/c4/nursery.c b/c4/nursery.c
--- a/c4/nursery.c
+++ b/c4/nursery.c
@@ -91,7 +91,7 @@
     assert(tid == (tid & STM_USER_TID_MASK));
     gcptr P = allocate_nursery(size, tid);
     P->h_revision = stm_private_rev_num;
-    /*P->h_original = 0; --- the object is null-initialized already */
+    assert(P->h_original == 0);  /* null-initialized already */
     return P;
 }
 
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to