New submission from Pablo Galindo Salgado <[email protected]>:
Reproducer:
Code for native_ext.cpp:
#define PY_SSIZE_T_CLEAN
#include <Python.h>
#include <assert.h>
#include <pthread.h>
#include <malloc.h>
#pragma GCC push_options
#pragma GCC optimize ("O0")
PyObject*
run_simple(PyObject*, PyObject*)
{
PyGILState_STATE gstate;
gstate = PyGILState_Ensure();
PyGILState_Release(gstate);
Py_RETURN_NONE;
}
static PyMethodDef methods[] = {
{"run_simple", run_simple, METH_NOARGS, "Execute a chain of native
functions"},
{NULL, NULL, 0, NULL},
};
#if PY_MAJOR_VERSION >= 3
static struct PyModuleDef moduledef = {PyModuleDef_HEAD_INIT, "native_ext", "",
-1, methods};
PyMODINIT_FUNC
PyInit_native_ext(void)
{
return PyModule_Create(&moduledef);
}
#else
PyMODINIT_FUNC
initnative_ext(void)
{
Py_InitModule("native_ext", methods);
}
#endif
Code for setup.py:
import os
from distutils.core import Extension
from distutils.core import setup
ROOT = os.path.realpath(os.path.dirname(__file__))
setup(
name="native_ext",
version="0.0",
ext_modules=[
Extension(
"native_ext",
language="c++",
sources=[os.path.join(ROOT, "native_ext.cpp")],
),
],
zip_safe=False,
)
Compile extension:
python setup.py build_ext --inplace
Execute the following script:
from test.support import run_in_subinterp
run_in_subinterp("""
import sys
sys.path.append(".")
import native_ext
native_ext.run_simple()
""")
The script deadlocks
----------
messages: 409975
nosy: eric.snow, pablogsal, vstinner
priority: normal
severity: normal
status: open
title: Subinterpreters hang in GIL adquisition if an extension module calls
PyGILState_Ensure.
versions: Python 3.10, Python 3.11, Python 3.9
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue46295>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com