https://github.com/python/cpython/commit/8cdd636f877c906121b27934522876a1d9ac12db
commit: 8cdd636f877c906121b27934522876a1d9ac12db
branch: 3.13
author: Eric Snow <[email protected]>
committer: ericsnowcurrently <[email protected]>
date: 2024-11-21T10:33:15-07:00
summary:

[3.13] gh-126986: Stop Using _PyInterpreterState_FailIfNotRunning() (gh-127112)

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.

files:
M Python/crossinterp.c
M Python/pystate.c

diff --git a/Python/crossinterp.c b/Python/crossinterp.c
index 2af0dd6191aa4e..01bb45d23bac1b 100644
--- a/Python/crossinterp.c
+++ b/Python/crossinterp.c
@@ -985,8 +985,8 @@ _PyXI_ApplyErrorCode(_PyXI_errcode code, PyInterpreterState 
*interp)
         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,
diff --git a/Python/pystate.c b/Python/pystate.c
index ad3fdce69bf1d5..960895e5badc27 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -1053,7 +1053,9 @@ get_main_thread(PyInterpreterState *interp)
 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();
@@ -1099,6 +1101,7 @@ _PyThreadState_IsRunningMain(PyThreadState *tstate)
     return get_main_thread(interp) == tstate;
 }
 
+// This has been removed in 3.14.
 int
 _PyInterpreterState_FailIfRunningMain(PyInterpreterState *interp)
 {

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to