Author: Armin Rigo <ar...@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)); } _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit