Author: Armin Rigo <[email protected]>
Branch: stmgc-c7
Changeset: r76029:59ea05c4e7c5
Date: 2015-02-21 12:53 +0100
http://bitbucket.org/pypy/pypy/changeset/59ea05c4e7c5/

Log:    import stmgc/78281a990907

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 @@
-6c6a18d9e312
+78281a990907
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
@@ -135,11 +135,19 @@
 
     char *p = allocate_outside_nursery_large(size_rounded_up);
     uintptr_t nobj = p - stm_object_pages;
+    dprintf(("allocate_preexisting: %p\n", (object_t *)nobj));
     long j;
     for (j = 0; j <= NB_SEGMENTS; j++) {
         char *dest = get_segment_base(j) + nobj;
         memcpy(dest, initial_data, size_rounded_up);
         ((struct object_s *)dest)->stm_flags = GCFLAG_WRITE_BARRIER;
+#ifdef STM_TESTS
+        /* can't really enable this check outside tests, because there is
+           a change that the transaction_state changes in parallel */
+        if (j && get_priv_segment(j)->transaction_state != TS_NONE) {
+            assert(!was_read_remote(get_segment_base(j), (object_t *)nobj));
+        }
+#endif
     }
 
     release_privatization_lock();
diff --git a/rpython/translator/stm/src_stm/stm/hashtable.c 
b/rpython/translator/stm/src_stm/stm/hashtable.c
--- a/rpython/translator/stm/src_stm/stm/hashtable.c
+++ b/rpython/translator/stm/src_stm/stm/hashtable.c
@@ -108,8 +108,12 @@
 
 static bool _stm_was_read_by_anybody(object_t *obj)
 {
+    /* can only be safely called during major GC, when all other threads
+       are suspended */
     long i;
     for (i = 1; i <= NB_SEGMENTS; i++) {
+        if (get_priv_segment(i)->transaction_state == TS_NONE)
+            continue;
         if (was_read_remote(get_segment_base(i), obj))
             return true;
     }
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to