Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r914:5d777b5b2815 Date: 2014-03-01 20:53 +0100 http://bitbucket.org/pypy/stmgc/changeset/5d777b5b2815/
Log: Fix, but a failing test. diff --git a/c7/stm/gcpage.c b/c7/stm/gcpage.c --- a/c7/stm/gcpage.c +++ b/c7/stm/gcpage.c @@ -277,8 +277,10 @@ tl = tl->next; } while (tl != stm_all_thread_locals); - LIST_FOREACH_R(testing_prebuilt_objs, object_t * /*item*/, - mark_record_trace(&item)); + if (testing_prebuilt_objs != NULL) { + LIST_FOREACH_R(testing_prebuilt_objs, object_t * /*item*/, + mark_record_trace(&item)); + } } static void mark_visit_all_objects(void) diff --git a/c7/test/support.py b/c7/test/support.py --- a/c7/test/support.py +++ b/c7/test/support.py @@ -183,7 +183,7 @@ void _set_ptr(object_t *obj, int n, object_t *v) { - int nrefs = ((myobj_t*)obj)->type_id - 421420; + long nrefs = (long)((myobj_t*)obj)->type_id - 421420; assert(n < nrefs); stm_char *field_addr = ((stm_char*)obj); @@ -195,7 +195,7 @@ object_t * _get_ptr(object_t *obj, int n) { - int nrefs = ((myobj_t*)obj)->type_id - 421420; + long nrefs = (long)((myobj_t*)obj)->type_id - 421420; assert(n < nrefs); stm_char *field_addr = ((stm_char*)obj); @@ -300,10 +300,12 @@ def stm_set_char(obj, c, offset=HDR): stm_write(obj) + assert HDR <= offset < stm_get_obj_size(obj) stm_get_real_address(obj)[offset] = c def stm_get_char(obj, offset=HDR): stm_read(obj) + assert HDR <= offset < stm_get_obj_size(obj) return stm_get_real_address(obj)[offset] def stm_get_real_address(obj): diff --git a/c7/test/test_gcpage.py b/c7/test/test_gcpage.py --- a/c7/test/test_gcpage.py +++ b/c7/test/test_gcpage.py @@ -137,6 +137,7 @@ self.start_transaction() x = stm_allocate(5000) stm_set_char(x, 'A') + stm_set_char(x, 'a', 4999) self.push_root(x) self.commit_transaction() assert lib._stm_total_allocated() == 5000 + LMO @@ -146,15 +147,37 @@ self.push_root(x) assert lib._stm_total_allocated() == 5000 + LMO stm_set_char(x, 'B') + stm_set_char(x, 'b', 4999) assert lib._stm_total_allocated() == 5000 + LMO + 2 * 4096 # 2 pages stm_major_collect() - assert stm_get_char(x) == 'B' + assert stm_get_char(x) == 'B' + assert stm_get_char(x, 4999) == 'b' self.switch(1) self.start_transaction() - assert stm_get_char(x) == 'A' + assert stm_get_char(x) == 'A' + assert stm_get_char(x, 4999) == 'a' self.switch(0) - assert stm_get_char(x) == 'B' + assert stm_get_char(x) == 'B' + assert stm_get_char(x, 4999) == 'b' assert lib._stm_total_allocated() == 5000 + LMO + 2 * 4096 # 2 pages + + def test_trace_correct_version_of_overflow_objects_1(self, size=32): + self.start_transaction() + # + self.switch(1) + self.start_transaction() + x = stm_allocate(size) + stm_set_char(x, 'E', size - 1) + self.push_root(x) + # + self.switch(0) + stm_major_collect() + # + self.switch(1) + assert stm_get_char(x, size - 1) == 'E' + + def test_trace_correct_version_of_overflow_objects_2(self): + self.test_trace_correct_version_of_overflow_objects_1(size=5000) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit