Author: Armin Rigo <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit