Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r155:5a94c3c1a159 Date: 2013-06-16 18:21 +0200 http://bitbucket.org/pypy/stmgc/changeset/5a94c3c1a159/
Log: Revert the change done in a recent commit and fix it differently (there are cases where it was still wrong). diff --git a/c4/et.c b/c4/et.c --- a/c4/et.c +++ b/c4/et.c @@ -955,7 +955,9 @@ L->h_revision = new_revision; gcptr stub = stm_stub_malloc(d->public_descriptor); - stub->h_tid = GCFLAG_PUBLIC | GCFLAG_STUB | GCFLAG_OLD; + stub->h_tid = (L->h_tid & STM_USER_TID_MASK) | GCFLAG_PUBLIC + | GCFLAG_STUB + | GCFLAG_OLD; stub->h_revision = ((revision_t)L) | 2; item->val = stub; diff --git a/c4/nursery.c b/c4/nursery.c --- a/c4/nursery.c +++ b/c4/nursery.c @@ -113,24 +113,9 @@ /* it's a nursery object. Was it already moved? */ if (UNLIKELY(obj->h_tid & GCFLAG_NURSERY_MOVED)) { - - /* yes, but was it actually a public object in the nursery? - (such objects are always NURSERY_MOVED) */ - if (obj->h_tid & GCFLAG_PUBLIC) { - - /* follow the chain of revisions. Necessary, otherwise - we could end up with 'obj' being an incomplete stub. */ - while (1) { - revision_t v = ACCESS_ONCE(obj->h_revision); - if (!IS_POINTER(v)) - break; - obj = (gcptr)v; - } - *root = obj; - return; - } - - /* common case: multiple refs, just fix the ref. */ + /* yes. Such an object can be a public object in the nursery + too (such objects are always NURSERY_MOVED). For all cases, + we can just fix the ref. */ *root = (gcptr)obj->h_revision; return; } diff --git a/c4/test/test_random.py b/c4/test/test_random.py --- a/c4/test/test_random.py +++ b/c4/test/test_random.py @@ -506,5 +506,5 @@ def test_more_multi_thread(): #py.test.skip("more random tests") - for i in range(46, 100): + for i in range(100): yield test_multi_thread, 1200 + i _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit