]> granicus.if.org Git - python/commitdiff
bpo-38266: Revert bpo-37878: Make PyThreadState_DeleteCurrent() Internal (GH-16558)
authorJoannah Nanjekye <33177550+nanjekyejoannah@users.noreply.github.com>
Fri, 4 Oct 2019 11:35:42 +0000 (08:35 -0300)
committerVictor Stinner <vstinner@python.org>
Fri, 4 Oct 2019 11:35:42 +0000 (13:35 +0200)
Revert the removal of PyThreadState_DeleteCurrent() with documentation.

Doc/c-api/init.rst
Include/cpython/pystate.h
Misc/NEWS.d/next/C API/2019-10-03-12-53-53.bpo-38266.0FIC1q.rst [new file with mode: 0644]
Python/pystate.c

index 0b7a84d031532ecc9c663cfbb2948b0164f2f127..5456ad446cf23fb9017c13f69a27660619185a87 100644 (file)
@@ -1035,6 +1035,14 @@ All of the following functions must be called after :c:func:`Py_Initialize`.
    :c:func:`PyThreadState_Clear`.
 
 
+   .. c:function:: void PyThreadState_DeleteCurrent()
+
+    Destroy the current thread state and release the global interpreter lock.
+    Like :c:func:`PyThreadState_Delete`, the global interpreter lock need not
+    be held. The thread state must have been reset with a previous call
+    to :c:func:`PyThreadState_Clear`.
+
+
 .. c:function:: PY_INT64_T PyInterpreterState_GetID(PyInterpreterState *interp)
 
    Return the interpreter's unique ID.  If there was any error in doing
index f872351780367369a770026e0d5c1fd0ac382a81..6c8d2ae041ea54c22b4e0edaf1f55922581ad758 100644 (file)
@@ -183,6 +183,7 @@ PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Head(void);
 PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Next(PyInterpreterState *);
 PyAPI_FUNC(PyThreadState *) PyInterpreterState_ThreadHead(PyInterpreterState *);
 PyAPI_FUNC(PyThreadState *) PyThreadState_Next(PyThreadState *);
+PyAPI_FUNC(void) PyThreadState_DeleteCurrent(void);
 
 typedef struct _frame *(*PyThreadFrameGetter)(PyThreadState *self_);
 
diff --git a/Misc/NEWS.d/next/C API/2019-10-03-12-53-53.bpo-38266.0FIC1q.rst b/Misc/NEWS.d/next/C API/2019-10-03-12-53-53.bpo-38266.0FIC1q.rst
new file mode 100644 (file)
index 0000000..3b4c423
--- /dev/null
@@ -0,0 +1 @@
+Revert the removal of PyThreadState_DeleteCurrent() with documentation.
\ No newline at end of file
index f3d89e7d2b256e5352f6054e60eefe36259036db..b4b12472286a3be604357a7dcb8f272b588a7b6f 100644 (file)
@@ -801,7 +801,7 @@ PyThreadState_Clear(PyThreadState *tstate)
 }
 
 
-/* Common code for PyThreadState_Delete() and _PyThreadState_DeleteCurrent() */
+/* Common code for PyThreadState_Delete() and PyThreadState_DeleteCurrent() */
 static void
 tstate_delete_common(_PyRuntimeState *runtime, PyThreadState *tstate)
 {
@@ -857,7 +857,7 @@ _PyThreadState_DeleteCurrent(_PyRuntimeState *runtime)
     PyThreadState *tstate = _PyRuntimeGILState_GetThreadState(gilstate);
     if (tstate == NULL)
         Py_FatalError(
-            "_PyThreadState_DeleteCurrent: no current tstate");
+            "PyThreadState_DeleteCurrent: no current tstate");
     tstate_delete_common(runtime, tstate);
     if (gilstate->autoInterpreterState &&
         PyThread_tss_get(&gilstate->autoTSSkey) == tstate)
@@ -868,6 +868,12 @@ _PyThreadState_DeleteCurrent(_PyRuntimeState *runtime)
     PyEval_ReleaseLock();
 }
 
+void
+PyThreadState_DeleteCurrent(void)
+{
+    _PyThreadState_DeleteCurrent(&_PyRuntime);
+}
+
 
 /*
  * Delete all thread states except the one passed as argument.