[pypy-commit] pypy stmgc-static-barrier: import stmgc/d2e01fce511f

arigo noreply at buildbot.pypy.org
Fri Aug 23 20:11:22 CEST 2013


Author: Armin Rigo <arigo at tunes.org>
Branch: stmgc-static-barrier
Changeset: r66308:5904f9845d8c
Date: 2013-08-23 20:10 +0200
http://bitbucket.org/pypy/pypy/changeset/5904f9845d8c/

Log:	import stmgc/d2e01fce511f

diff --git a/rpython/translator/stm/src_stm/revision b/rpython/translator/stm/src_stm/revision
--- a/rpython/translator/stm/src_stm/revision
+++ b/rpython/translator/stm/src_stm/revision
@@ -1,1 +1,1 @@
-f614fd3a4080
+d2e01fce511f
diff --git a/rpython/translator/stm/src_stm/steal.c b/rpython/translator/stm/src_stm/steal.c
--- a/rpython/translator/stm/src_stm/steal.c
+++ b/rpython/translator/stm/src_stm/steal.c
@@ -218,11 +218,12 @@
             dprintf(("already stolen: %p -> %p\n", P, L));
 
             /* note that we should follow h_revision at least one more
-               step: it is necessary if L is public but young (and then
-               has GCFLAG_MOVED), but it is fine to do it more
-               generally. */
-            v = ACCESS_ONCE(L->h_revision);
-            if (IS_POINTER(v)) {
+               step: in the case where L is public but young (and then
+               has GCFLAG_MOVED).  Don't do it generally!  L might be
+               a stub again. */
+            if (L->h_tid & GCFLAG_MOVED) {
+                v = ACCESS_ONCE(L->h_revision);
+                assert(IS_POINTER(v));
                 L = (gcptr)v;
                 dprintf(("\t---> %p\n", L));
             }


More information about the pypy-commit mailing list