Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r142:3f512083c4c1 Date: 2013-06-16 11:48 +0200 http://bitbucket.org/pypy/stmgc/changeset/3f512083c4c1/
Log: Next test failure diff --git a/c4/test/model.py b/c4/test/model.py --- a/c4/test/model.py +++ b/c4/test/model.py @@ -179,3 +179,10 @@ def __init__(self, current_revision, numrefs): self.created_in_revision = current_revision current_revision.content[self] = [None] * numrefs + + def __repr__(self): + if hasattr(self, 'identity') and hasattr(self, 'ffi'): + return '<StmObject 0x%x>' % ( + int(self.ffi.cast('intptr_t', self.identity)),) + else: + return '<StmObject at 0x%x>' % (id(self),) diff --git a/c4/test/test_nursery.py b/c4/test/test_nursery.py --- a/c4/test/test_nursery.py +++ b/c4/test/test_nursery.py @@ -276,3 +276,23 @@ p2b = lib.stm_pop_root() p2c = lib.stm_pop_root() assert p2a == p2b == p2c + +def test_backup_ptr_update(): + p1 = nalloc_refs(1) + p2 = nalloc(HDR + WORD) + lib.setlong(p2, 0, 389719) + lib.setptr(p1, 0, p2) + lib.stm_push_root(p1) + assert lib.in_nursery(p1) + + @perform_transaction + def run(retry_counter): + if retry_counter == 0: + lib.stm_write_barrier(p1) + minor_collect() + abort_and_retry() + + p1 = lib.stm_pop_root() + assert not lib.in_nursery(p1) + p2 = lib.getptr(p1, 0) + assert lib.getlong(p2, 0) == 389719 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 @@ -57,7 +57,7 @@ text = '%d.%d$ %s\n' % (self.seed, self.counter, text) sys.stderr.write(text) self.counter += 1 - #if text.startswith('261225.987$'): + #if text.startswith('3970.539$'): # import pdb; pdb.set_trace() def check_not_free(self, ptr): @@ -78,6 +78,7 @@ assert self.current_rev is not None obj = model.StmObject(self.current_rev, 2) obj.identity = pid + obj.ffi = ffi self.sync.id2stmobj[pid] = obj return pair(obj, nptr) @@ -216,6 +217,7 @@ p = lst.pop() if p == emptypair: continue + self.dump(repr(p)) self.check(p) ptr = self.nonrecord_barrier(p.ptr) @@ -241,10 +243,12 @@ qobj = content[i] qptr = lib.rawgetptr(ptr, i) q = pair(qobj, qptr) + self.dump('[%d] = %r' % (i, q)) self.check(q) if q not in seen: lst.append(q) seen.add(q) + self.dump('ok') def transaction_break(self): if self.interruptible_transaction: @@ -412,7 +416,7 @@ def test_more_single_thread(): #py.test.skip("more random tests") - for i in range(100): + for i in range(70, 100): yield test_single_thread, i + 3900 _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit