Author: Armin Rigo <ar...@tunes.org> Branch: stmgc-static-barrier Changeset: r66161:246fc4c25260 Date: 2013-08-15 11:27 +0200 http://bitbucket.org/pypy/pypy/changeset/246fc4c25260/
Log: import stmgc/50d9d16d6327 diff --git a/rpython/translator/stm/src_stm/gcpage.c b/rpython/translator/stm/src_stm/gcpage.c --- a/rpython/translator/stm/src_stm/gcpage.c +++ b/rpython/translator/stm/src_stm/gcpage.c @@ -497,6 +497,14 @@ visit_take_protected(d->thread_local_obj_ref); visit_take_protected(&d->old_thread_local_obj); + /* the abortinfo objects */ + long i, size = d->abortinfo.size; + gcptr *items = d->abortinfo.items; + for (i = 0; i < size; i += 2) { + visit_take_protected(&items[i]); + /* items[i+1] is not a gc ptr */ + } + /* the current transaction's private copies of public objects */ wlog_t *item; G2L_LOOP_FORWARD(d->public_to_private, item) { @@ -528,8 +536,8 @@ } G2L_LOOP_END; /* reinsert to real pub_to_priv */ - long i, size = new_public_to_private.size; - gcptr *items = new_public_to_private.items; + size = new_public_to_private.size; + items = new_public_to_private.items; for (i = 0; i < size; i += 2) { g2l_insert(&d->public_to_private, items[i], items[i + 1]); } diff --git a/rpython/translator/stm/src_stm/nursery.c b/rpython/translator/stm/src_stm/nursery.c --- a/rpython/translator/stm/src_stm/nursery.c +++ b/rpython/translator/stm/src_stm/nursery.c @@ -437,6 +437,19 @@ spinlock_release(d->public_descriptor->collection_lock); } +static void mark_extra_stuff(struct tx_descriptor *d) +{ + visit_if_young(d->thread_local_obj_ref); + visit_if_young(&d->old_thread_local_obj); + + long i, size = d->abortinfo.size; + gcptr *items = d->abortinfo.items; + for (i = 0; i < size; i += 2) { + visit_if_young(&items[i]); + /* items[i+1] is not a gc ptr */ + } +} + static void minor_collect(struct tx_descriptor *d) { dprintf(("minor collection [%p to %p]\n", @@ -452,8 +465,7 @@ mark_young_roots(d); - visit_if_young(d->thread_local_obj_ref); - visit_if_young(&d->old_thread_local_obj); + mark_extra_stuff(d); mark_stolen_young_stubs(d); 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 @@ -edbd90784082 +50d9d16d6327 _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit