[pypy-commit] pypy gc-forkfriendly: hg merge default

devin.jeanpierre pypy.commits at gmail.com
Mon May 2 18:41:02 EDT 2016


Author: Devin Jeanpierre <jeanpierreda at gmail.com>
Branch: gc-forkfriendly
Changeset: r84148:eb1b0eb99f2f
Date: 2016-05-02 10:50 -0700
http://bitbucket.org/pypy/pypy/changeset/eb1b0eb99f2f/

Log:	hg merge default

diff --git a/rpython/translator/backendopt/test/test_finalizer.py b/rpython/translator/backendopt/test/test_finalizer.py
--- a/rpython/translator/backendopt/test/test_finalizer.py
+++ b/rpython/translator/backendopt/test/test_finalizer.py
@@ -35,31 +35,6 @@
         r = self.analyze(f, [])
         assert not r
 
-def test_various_ops():
-    from rpython.flowspace.model import SpaceOperation, Constant
-
-    X = lltype.Ptr(lltype.GcStruct('X'))
-    Z = lltype.Ptr(lltype.Struct('Z'))
-    S = lltype.GcStruct('S', ('x', lltype.Signed),
-                        ('y', X),
-                        ('z', Z))
-    v1 = varoftype(lltype.Bool)
-    v2 = varoftype(lltype.Signed)
-    f = FinalizerAnalyzer(None)
-    r = f.analyze(SpaceOperation('cast_int_to_bool', [v2],
-                                                       v1))
-    assert not r
-    v1 = varoftype(lltype.Ptr(S))
-    v2 = varoftype(lltype.Signed)
-    v3 = varoftype(X)
-    v4 = varoftype(Z)
-    assert not f.analyze(SpaceOperation('bare_setfield', [v1, Constant('x'),
-                                                          v2], None))
-    assert     f.analyze(SpaceOperation('bare_setfield', [v1, Constant('y'),
-                                                          v3], None))
-    assert not f.analyze(SpaceOperation('bare_setfield', [v1, Constant('z'),
-                                                          v4], None))
-
     def test_malloc(self):
         S = lltype.GcStruct('S')
 
@@ -100,6 +75,22 @@
             lltype.free(p, flavor='raw')
 
         r = self.analyze(g, [], f, backendopt=True)
+        assert r
+
+    def test_c_call_without_release_gil(self):
+        C = rffi.CArray(lltype.Signed)
+        c = rffi.llexternal('x', [lltype.Ptr(C)], lltype.Signed,
+                            releasegil=False)
+
+        def g():
+            p = lltype.malloc(C, 3, flavor='raw')
+            f(p)
+
+        def f(p):
+            c(rffi.ptradd(p, 0))
+            lltype.free(p, flavor='raw')
+
+        r = self.analyze(g, [], f, backendopt=True)
         assert not r
 
     def test_chain(self):
@@ -131,3 +122,30 @@
             pass
         self.analyze(g, []) # did not explode
         py.test.raises(FinalizerError, self.analyze, f, [])
+
+
+def test_various_ops():
+    from rpython.flowspace.model import SpaceOperation, Constant
+
+    X = lltype.Ptr(lltype.GcStruct('X'))
+    Z = lltype.Ptr(lltype.Struct('Z'))
+    S = lltype.GcStruct('S', ('x', lltype.Signed),
+                        ('y', X),
+                        ('z', Z))
+    v1 = varoftype(lltype.Bool)
+    v2 = varoftype(lltype.Signed)
+    f = FinalizerAnalyzer(None)
+    r = f.analyze(SpaceOperation('cast_int_to_bool', [v2],
+                                                       v1))
+    assert not r
+    v1 = varoftype(lltype.Ptr(S))
+    v2 = varoftype(lltype.Signed)
+    v3 = varoftype(X)
+    v4 = varoftype(Z)
+    assert not f.analyze(SpaceOperation('bare_setfield', [v1, Constant('x'),
+                                                          v2], None))
+    assert     f.analyze(SpaceOperation('bare_setfield', [v1, Constant('y'),
+                                                          v3], None))
+    assert not f.analyze(SpaceOperation('bare_setfield', [v1, Constant('z'),
+                                                          v4], None))
+


More information about the pypy-commit mailing list