[pypy-commit] pypy nogil-unsafe-2: (arigo, remi) WIP with failing test

Raemi pypy.commits at gmail.com
Fri Mar 3 12:44:13 EST 2017


Author: Remi Meier <remi.meier at gmail.com>
Branch: nogil-unsafe-2
Changeset: r90514:9d54936470c4
Date: 2017-03-03 18:43 +0100
http://bitbucket.org/pypy/pypy/changeset/9d54936470c4/

Log:	(arigo, remi) WIP with failing test

diff --git a/rpython/memory/gctransform/shadowstack.py b/rpython/memory/gctransform/shadowstack.py
--- a/rpython/memory/gctransform/shadowstack.py
+++ b/rpython/memory/gctransform/shadowstack.py
@@ -90,6 +90,7 @@
                     callback(gc, addr)
         self.rootstackhook = walk_stack_root
 
+        from rpython.rlib.debug import ll_assert, debug_print, debug_start, debug_stop
         def walk_thread_stack(collect_stack_root, tl):
             # XXX: only visit if nursery_free was not NULL
             base = (tl + tl_shadowstack._offset).address[0]
@@ -100,6 +101,7 @@
                 # walk that new thread's shadowstack (XXX: compiler may reorder
                 # without barriers)
                 return
+            debug_print("walk_stack", base, top)
             self.rootstackhook(collect_stack_root, base, top)
         self._walk_thread_stack = walk_thread_stack
 
diff --git a/rpython/translator/c/src/mem.c b/rpython/translator/c/src/mem.c
--- a/rpython/translator/c/src/mem.c
+++ b/rpython/translator/c/src/mem.c
@@ -13,7 +13,7 @@
   const char *funcname;
 };
 
-static struct pypy_debug_alloc_s *pypy_debug_alloc_list = NULL;
+static  struct pypy_debug_alloc_s *pypy_debug_alloc_list = NULL;
 
 static rpy_spinlock_t pypy_debug_alloc_lock = 0;
 
@@ -35,7 +35,7 @@
 {
   struct pypy_debug_alloc_s **p;
   if (!addr)
-	return;
+    return;
   rpy_spinlock_acquire(&pypy_debug_alloc_lock);
   for (p = &pypy_debug_alloc_list; *p; p = &((*p)->next))
     if ((*p)->addr == addr)
diff --git a/rpython/translator/c/test/test_standalone.py b/rpython/translator/c/test/test_standalone.py
--- a/rpython/translator/c/test/test_standalone.py
+++ b/rpython/translator/c/test/test_standalone.py
@@ -1432,8 +1432,9 @@
         from rpython.rlib import rthread, rposix
 
         class X:
-            def __init__(self, prev):
+            def __init__(self, prev, i):
                 self.prev = prev
+                self.i = i
 
         class State:
             pass
@@ -1443,7 +1444,13 @@
             rthread.gc_thread_start()
             x = None
             for i in range(100000000):
-                x = X(x)
+                prev_x = x
+
+                x = X(x, i)
+
+                if prev_x is not None:
+                    assert prev_x.i == i - 1
+
                 if i % 5001 == 0:
                     x = None
 
@@ -1467,11 +1474,15 @@
             for _ in range(TS):
                 new_thread()
 
+            i = 0
             while True:
+                x = X(None, i)
                 time.sleep(0.1)
+                assert x.i == i
                 #gc.collect()
                 if state.counter == 0:
                     break
+                i += 1
             os.write(1, "all threads done\n")
             return 0
 


More information about the pypy-commit mailing list