Author: mattip <matti.pi...@gmail.com>
Branch: cpyext-ext
Changeset: r83234:80601779330a
Date: 2016-03-21 23:31 +0200
http://bitbucket.org/pypy/pypy/changeset/80601779330a/

Log:    add test that hangs at rgil.acquire, passes with -A

diff --git a/pypy/module/cpyext/test/test_pystate.py 
b/pypy/module/cpyext/test/test_pystate.py
--- a/pypy/module/cpyext/test/test_pystate.py
+++ b/pypy/module/cpyext/test/test_pystate.py
@@ -1,4 +1,4 @@
-import py
+import py, pytest
 from pypy.module.cpyext.test.test_cpyext import AppTestCpythonExtensionBase
 from pypy.module.cpyext.test.test_api import BaseApiTest
 from rpython.rtyper.lltypesystem.lltype import nullptr
@@ -26,6 +26,29 @@
         # Should compile at least
         module.test()
 
+    @pytest.mark.xfail(reason='hangs at rgil.acquire', run=False)
+    def test_gilstate(self):
+        module = self.import_extension('foo', [
+            ("double_ensure", "METH_O",
+             '''
+                PyGILState_STATE state0, state1;
+                int val = PyLong_AsLong(args);
+                PyEval_InitThreads();
+                state0 = PyGILState_Ensure(); /* hangs here */
+                if (val != 0)
+                { 
+                    state1 = PyGILState_Ensure();
+                    PyGILState_Release(state1);
+                }
+                PyGILState_Release(state0);
+                Py_RETURN_NONE;
+             '''),
+            ])
+        module.double_ensure(0)
+        print '0 ok'
+        module.double_ensure(1)
+        print '1 ok'
+
 
     def test_thread_state_get(self):
         module = self.import_extension('foo', [
@@ -48,18 +71,20 @@
 
     def test_basic_threadstate_dance(self):
         if self.runappdirect:
-            py.test.xfail('segfault: PyThreadState_Get: no current thread')
+            py.test.xfail('segfault: on cpython cannot Get() a NULL tstate')
         module = self.import_extension('foo', [
                 ("dance", "METH_NOARGS",
                  """
                      PyThreadState *old_tstate, *new_tstate;
 
+                     PyEval_InitThreads();
+
                      old_tstate = PyThreadState_Swap(NULL);
                      if (old_tstate == NULL) {
                          return PyLong_FromLong(0);
                      }
 
-                     new_tstate = PyThreadState_Get();
+                     new_tstate = PyThreadState_Get(); /* fails on cpython */
                      if (new_tstate != NULL) {
                          return PyLong_FromLong(1);
                      }
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to