This is a pseudo-backport of
d6b3e78 (gh-126988). In that change for 3.14+, we dropped _PyInterpreterState_FailIfNotRunning() and added _PyErr_SetInterpreterAlreadyRunning(). Here, we replace usage of _PyInterpreterState_FailIfNotRunning() with the inlined equivalent of _PyErr_SetInterpreterAlreadyRunning(), without adding that function. That way we avoid changing the 3.13 ABI.
break;
case _PyXI_ERR_ALREADY_RUNNING:
assert(interp != NULL);
- assert(_PyInterpreterState_IsRunningMain(interp));
- _PyInterpreterState_FailIfRunningMain(interp);
+ // In 3.14+ we use _PyErr_SetInterpreterAlreadyRunning().
+ PyErr_SetString(PyExc_InterpreterError, "interpreter already running");
break;
case _PyXI_ERR_MAIN_NS_FAILURE:
PyErr_SetString(PyExc_InterpreterError,
int
_PyInterpreterState_SetRunningMain(PyInterpreterState *interp)
{
- if (_PyInterpreterState_FailIfRunningMain(interp) < 0) {
+ if (get_main_thread(interp) != NULL) {
+ // In 3.14+ we use _PyErr_SetInterpreterAlreadyRunning().
+ PyErr_SetString(PyExc_InterpreterError, "interpreter already running");
return -1;
}
PyThreadState *tstate = current_fast_get();
return get_main_thread(interp) == tstate;
}
+// This has been removed in 3.14.
int
_PyInterpreterState_FailIfRunningMain(PyInterpreterState *interp)
{