Author: Remi Meier <[email protected]>
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
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit