Skip to content

Commit

Permalink
bpo-38266: Revert bpo-37878: Make PyThreadState_DeleteCurrent() Inter…
Browse files Browse the repository at this point in the history
…nal (pythonGH-16558)

Revert the removal of PyThreadState_DeleteCurrent() with documentation.
  • Loading branch information
nanjekyejoannah authored and vstinner committed Oct 4, 2019
1 parent 06cb94b commit 8855e47
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 2 deletions.
8 changes: 8 additions & 0 deletions Doc/c-api/init.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions Include/cpython/pystate.h
Original file line number Diff line number Diff line change
Expand Up @@ -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_);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Revert the removal of PyThreadState_DeleteCurrent() with documentation.
10 changes: 8 additions & 2 deletions Python/pystate.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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)
Expand All @@ -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.
Expand Down

0 comments on commit 8855e47

Please sign in to comment.