Commit fde9b33d authored by Pablo Galindo's avatar Pablo Galindo Committed by GitHub

bpo-36427: Document that PyEval_RestoreThread and PyGILState_Ensure can...

bpo-36427: Document that PyEval_RestoreThread and PyGILState_Ensure can terminate the calling thread (GH-12541)

Calling these function from a thread when the runtime is finalizing will terminate
the thread, even if the thread was not created by Python. Users can use 
_Py_IsFinalizing or sys.is_finalizing to check if the interpreter is in the process of
being finalized before calling this function to avoid unwanted termination.
parent 46544f69
...@@ -856,6 +856,12 @@ code, or when embedding the Python interpreter: ...@@ -856,6 +856,12 @@ code, or when embedding the Python interpreter:
created, the current thread must not have acquired it, otherwise deadlock created, the current thread must not have acquired it, otherwise deadlock
ensues. ensues.
.. note::
Calling this function from a thread when the runtime is finalizing
will terminate the thread, even if the thread was not created by Python.
You can use :c:func:`_Py_IsFinalizing` or :func:`sys.is_finalizing` to
check if the interpreter is in process of being finalized before calling
this function to avoid unwanted termination.
.. c:function:: PyThreadState* PyThreadState_Get() .. c:function:: PyThreadState* PyThreadState_Get()
...@@ -903,6 +909,12 @@ with sub-interpreters: ...@@ -903,6 +909,12 @@ with sub-interpreters:
When the function returns, the current thread will hold the GIL and be able When the function returns, the current thread will hold the GIL and be able
to call arbitrary Python code. Failure is a fatal error. to call arbitrary Python code. Failure is a fatal error.
.. note::
Calling this function from a thread when the runtime is finalizing
will terminate the thread, even if the thread was not created by Python.
You can use :c:func:`_Py_IsFinalizing` or :func:`sys.is_finalizing` to
check if the interpreter is in process of being finalized before calling
this function to avoid unwanted termination.
.. c:function:: void PyGILState_Release(PyGILState_STATE) .. c:function:: void PyGILState_Release(PyGILState_STATE)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment