Author: Remi Meier <remi.me...@gmail.com> Branch: c7 Changeset: r608:cb41605afd90 Date: 2014-01-14 16:15 +0100 http://bitbucket.org/pypy/stmgc/changeset/cb41605afd90/
Log: stop_transaction hacking for tests diff --git a/c7/core.c b/c7/core.c --- a/c7/core.c +++ b/c7/core.c @@ -463,7 +463,6 @@ void _stm_teardown_thread(void) { - assert(!_STM_TL2->running_transaction); wait_until_updated(); stm_list_free(_STM_TL2->modified_objects); _STM_TL2->modified_objects = NULL; @@ -538,7 +537,6 @@ wait_until_updated(); stm_list_clear(_STM_TL2->modified_objects); - assert(stm_list_is_empty(_STM_TL2->new_object_ranges)); /* check that there is no stm_abort() in the following maybe_update() */ _STM_TL1->jmpbufptr = NULL; @@ -569,8 +567,8 @@ void stm_stop_transaction(void) { + assert(_STM_TL2->running_transaction); #if 0 - assert(_STM_TL2->running_transaction); write_fence(); /* see later in this function for why */ @@ -662,9 +660,8 @@ } } } - +#endif _STM_TL2->running_transaction = 0; -#endif } void stm_abort_transaction(void) diff --git a/c7/test/support.py b/c7/test/support.py --- a/c7/test/support.py +++ b/c7/test/support.py @@ -33,7 +33,7 @@ void stm_setup_thread(void); void stm_start_transaction(jmpbufptr_t *); -void stm_stop_transaction(void); +bool _stm_stop_transaction(void); object_t *stm_allocate(size_t size); void stm_read(object_t *object); @@ -54,12 +54,27 @@ lib = ffi.verify(''' #include <string.h> +#include <assert.h> + #include "core.h" size_t stm_object_size_rounded_up(object_t * obj) { return 16; } +bool _stm_stop_transaction(void) { + jmpbufptr_t here; + if (__builtin_setjmp(here) == 0) { + assert(_STM_TL1->jmpbufptr == (jmpbufptr_t*)-1); + _STM_TL1->jmpbufptr = &here; + stm_stop_transaction(); + _STM_TL1->jmpbufptr = (jmpbufptr_t*)-1; + return 0; + } + _STM_TL1->jmpbufptr = (jmpbufptr_t*)-1; + return 1; +} + ''', sources=source_files, define_macros=[('STM_TESTS', '1')], undef_macros=['NDEBUG'], @@ -87,14 +102,14 @@ return lib._stm_was_written(lib._stm_tl_address(ptr)) def stm_start_transaction(): - lib.stm_start_transaction() + lib.stm_start_transaction(ffi.cast("jmpbufptr_t*", -1)) -def stm_stop_transaction(expected_conflict): - res = lib.stm_stop_transaction() +def stm_stop_transaction(expected_conflict=False): + res = lib._stm_stop_transaction() if expected_conflict: + assert res == 1 + else: assert res == 0 - else: - assert res == 1 class BaseTest(object): diff --git a/c7/test/test_basic.py b/c7/test/test_basic.py --- a/c7/test/test_basic.py +++ b/c7/test/test_basic.py @@ -23,6 +23,14 @@ p4 = stm_allocate(16) assert p4 - p3 == 16 + def test_simple(self): + stm_start_transaction() + self.switch(1) + stm_start_transaction() + stm_stop_transaction() + self.switch(0) + stm_stop_transaction() + def test_read_write_1(self): stm_start_transaction() p1 = stm_allocate(16) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit