Author: Armin Rigo <ar...@tunes.org> Branch: stm Changeset: r47623:f9b9cf3cebc6 Date: 2011-09-27 14:24 +0200 http://bitbucket.org/pypy/pypy/changeset/f9b9cf3cebc6/
Log: Progress. diff --git a/pypy/translator/stm/_rffi_stm.py b/pypy/translator/stm/_rffi_stm.py --- a/pypy/translator/stm/_rffi_stm.py +++ b/pypy/translator/stm/_rffi_stm.py @@ -25,9 +25,9 @@ begin_transaction = llexternal('stm_begin_transaction_inline',[], lltype.Void) commit_transaction = llexternal('stm_commit_transaction', [], lltype.Signed) -read_word = llexternal('stm_read_word', [rffi.VOIDPP], rffi.VOIDP) -write_word = llexternal('stm_write_word', [rffi.VOIDPP, rffi.VOIDP], - lltype.Void) +stm_read_word = llexternal('stm_read_word', [rffi.VOIDPP], rffi.VOIDP) +stm_write_word = llexternal('stm_write_word', [rffi.VOIDPP, rffi.VOIDP], + lltype.Void) CALLBACK = lltype.Ptr(lltype.FuncType([rffi.VOIDP], rffi.VOIDP)) perform_transaction = llexternal('stm_perform_transaction', diff --git a/pypy/translator/stm/test/test_rffi_stm.py b/pypy/translator/stm/test/test_rffi_stm.py --- a/pypy/translator/stm/test/test_rffi_stm.py +++ b/pypy/translator/stm/test/test_rffi_stm.py @@ -29,3 +29,26 @@ lltype.nullptr(rffi.VOIDP.TO)) descriptor_done() assert a.x == 420 + +def test_abort_and_retry_transactionally(): + A = lltype.Struct('A', ('x', lltype.Signed), ('y', lltype.Signed)) + a = lltype.malloc(A, immortal=True, flavor='raw') + a.x = -611 + a.y = 0 + def callback1(x): + assert a.x == -611 + p = lltype.direct_fieldptr(a, 'x') + p = rffi.cast(rffi.VOIDPP, p) + assert rffi.cast(lltype.Signed, stm_read_word(p)) == -611 + stm_write_word(p, rffi.cast(rffi.VOIDP, 42 * a.y)) + assert rffi.cast(lltype.Signed, stm_read_word(p)) == 42 * a.y + if a.y < 10: + a.y += 1 # non-transactionally + abort_and_retry() + else: + return lltype.nullptr(rffi.VOIDP.TO) + descriptor_init() + perform_transaction(llhelper(CALLBACK, callback1), + lltype.nullptr(rffi.VOIDP.TO)) + descriptor_done() + assert a.x == 420 _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit