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

Reply via email to