Author: Remi Meier <remi.me...@gmail.com> Branch: nonmovable-int-ref Changeset: r478:7924c243aab1 Date: 2013-08-15 13:09 +0200 http://bitbucket.org/pypy/stmgc/changeset/7924c243aab1/
Log: merge diff --git a/c4/gcpage.c b/c4/gcpage.c --- a/c4/gcpage.c +++ b/c4/gcpage.c @@ -550,6 +550,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) { @@ -581,8 +589,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/c4/nursery.c b/c4/nursery.c --- a/c4/nursery.c +++ b/c4/nursery.c @@ -436,6 +436,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", @@ -451,8 +464,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); _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit