Author: Armin Rigo <ar...@tunes.org> Branch: stmgc-c7 Changeset: r75555:770bd3fc0462 Date: 2015-01-28 14:26 +0100 http://bitbucket.org/pypy/pypy/changeset/770bd3fc0462/
Log: update to stmgc/e7a6ff9e9da3 diff --git a/rpython/translator/stm/src_stm/revision b/rpython/translator/stm/src_stm/revision --- a/rpython/translator/stm/src_stm/revision +++ b/rpython/translator/stm/src_stm/revision @@ -1,1 +1,1 @@ -24b92a4c84be +e7a6ff9e9da3 diff --git a/rpython/translator/stm/src_stm/stm/gcpage.c b/rpython/translator/stm/src_stm/stm/gcpage.c --- a/rpython/translator/stm/src_stm/stm/gcpage.c +++ b/rpython/translator/stm/src_stm/stm/gcpage.c @@ -426,24 +426,33 @@ { /* The modified objects are the ones that may exist in two different versions: one in the segment that modified it, and another in all - other segments. (It can also be more than two if we don't have - eager write locking.) + other segments. (It could also be more than two if we did't have + eager write locking, but for now we do.) */ long i; for (i = 1; i <= NB_SEGMENTS; i++) { + LIST_FOREACH_R( + get_priv_segment(i)->modified_old_objects, + object_t * /*item*/, + ({ + /* This function is called first, and there should not be + any duplicate in modified_old_objects. */ + if (mark_visited_test_and_set(item)) { + assert(!"duplicate in modified_old_objects!"); + } + })); + } + + /* Now that we have marked all modified_old_objects, trace them + (which will mark more objects). + */ + 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*/, ({ - /* (arigo) I think that here we need to mark_trace() both - the shared version and the private version in all cases. - Even if the visited flag is already set, we don't know - which version was already traced... Chances are that - it was the stm_object_pages version, but we are not sure. - */ - mark_visited_test_and_set(item); mark_trace(item, stm_object_pages); /* shared version */ mark_trace(item, base); /* private version */ })); _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit