Author: Armin Rigo <ar...@tunes.org> Branch: stm-gc Changeset: r54420:f0e91e76c868 Date: 2012-04-16 15:50 +0200 http://bitbucket.org/pypy/pypy/changeset/f0e91e76c868/
Log: Fixes diff --git a/pypy/translator/stm/test/targetdemo.py b/pypy/translator/stm/test/targetdemo.py --- a/pypy/translator/stm/test/targetdemo.py +++ b/pypy/translator/stm/test/targetdemo.py @@ -100,6 +100,7 @@ @rgc.no_collect # don't use the gc as long as other threads are running def _run(): + rstm.enter_transactional_mode() i = 0 while i < glob.NUM_THREADS: glob._arg = glob._arglist[i] @@ -111,6 +112,7 @@ while glob.done < glob.NUM_THREADS: # poor man's lock _sleep(rffi.cast(rffi.ULONG, 1)) debug_print("done sleeping.") + rstm.leave_transactional_mode() # Posix only diff --git a/pypy/translator/stm/transform.py b/pypy/translator/stm/transform.py --- a/pypy/translator/stm/transform.py +++ b/pypy/translator/stm/transform.py @@ -249,7 +249,7 @@ # one variable on which we do 'stm_writebarrier', but there are # also other variables that contain the same pointer, e.g. casted # to a different precise type. - from pypy.translator.stm.gcsource import COPIES_POINTER + from pypy.translator.stm.gcsource import COPIES_POINTER, _is_gc # def emit(op): for v1 in op.args: @@ -275,7 +275,8 @@ for op in block.operations: if op.opname in COPIES_POINTER: assert len(op.args) == 1 - copies[op.result] = op + if _is_gc(op.result) and _is_gc(op.args[0]): + copies[op.result] = op elif (op.opname in ('getfield', 'getarrayitem', 'getinteriorfield') and op.result.concretetype is not lltype.Void and _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit