[pypy-commit] stmgc c8-private-pages: fix for different modified_old_objects list elements
Raemi
noreply at buildbot.pypy.org
Thu Jan 15 18:43:03 CET 2015
Author: Remi Meier <remi.meier at inf.ethz.ch>
Branch: c8-private-pages
Changeset: r1533:97bee124dc0b
Date: 2015-01-15 17:00 +0100
http://bitbucket.org/pypy/stmgc/changeset/97bee124dc0b/
Log: fix for different modified_old_objects list elements
diff --git a/c8/stm/gcpage.c b/c8/stm/gcpage.c
--- a/c8/stm/gcpage.c
+++ b/c8/stm/gcpage.c
@@ -270,19 +270,19 @@
for (i = 1; i < NB_SEGMENTS; i++) {
char *base = get_segment_base(i);
- LIST_FOREACH_R(
- get_priv_segment(i)->modified_old_objects,
- object_t * /*item*/,
- ({
- /* All modified objs have all pages accessible for now.
- This is because we create a backup of the whole obj
- and thus make all pages accessible. */
- assert_obj_accessible_in(i, item);
+ struct list_s *lst = get_priv_segment(i)->modified_old_objects;
+ long j, count = list_count(lst);
+ for (j = 0; j < count; j += 3) {
+ object_t *item = (object_t*)list_item(lst, j);
+ /* All modified objs have all pages accessible for now.
+ This is because we create a backup of the whole obj
+ and thus make all pages accessible. */
+ assert_obj_accessible_in(i, item);
- mark_visited_test_and_set(item);
- mark_and_trace(item, stm_object_pages); /* shared, committed version */
- mark_and_trace(item, base); /* private, modified version */
- }));
+ mark_visited_test_and_set(item);
+ mark_and_trace(item, stm_object_pages); /* shared, committed version */
+ mark_and_trace(item, base); /* private, modified version */
+ }
}
}
@@ -374,7 +374,7 @@
{
/* this is called by _stm_largemalloc_sweep() */
object_t *obj = (object_t *)(data - stm_object_pages);
- dprintf(("keep obj %p ? -> %d\n", obj, mark_visited_test(obj)));
+ //dprintf(("keep obj %p ? -> %d\n", obj, mark_visited_test(obj)));
if (!mark_visited_test_and_clear(obj)) {
/* This is actually needed in order to avoid random write-read
conflicts with objects read and freed long in the past.
diff --git a/c8/test/test_gcpage.py b/c8/test/test_gcpage.py
--- a/c8/test/test_gcpage.py
+++ b/c8/test/test_gcpage.py
@@ -176,6 +176,8 @@
assert lib._stm_total_allocated() == 5000 + LMO
stm_set_char(x, 'B')
stm_set_char(x, 'b', 4999)
+
+ py.test.skip("we don't account for private pages right now")
assert lib._stm_total_allocated() == 5000 + LMO + 2 * 4096 # 2 pages
stm_major_collect()
@@ -219,12 +221,15 @@
self.push_root(x)
self.commit_transaction()
x = self.pop_root()
+ assert not is_in_nursery(x)
#
self.switch(1 - invert)
self.start_transaction()
self.push_root(x)
stm_set_char(x, 'A')
stm_major_collect()
+
+ py.test.skip("we don't account for private pages right now")
assert lib._stm_total_allocated() == 5000 + LMO + 2 * 4096 # 2 pages
self.commit_transaction()
#
@@ -236,6 +241,7 @@
self.test_reshare_if_no_longer_modified_0(invert=1)
def test_threadlocal_at_start_of_transaction(self):
+ py.test.skip("no threadlocal right now")
self.start_transaction()
x = stm_allocate(16)
stm_set_char(x, 'L')
More information about the pypy-commit
mailing list