]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.13] gh-124160: Pass main_tstate to update_global_state_for_extension() (GH-124164...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Mon, 23 Sep 2024 23:16:41 +0000 (01:16 +0200)
committerGitHub <noreply@github.com>
Mon, 23 Sep 2024 23:16:41 +0000 (16:16 -0700)
gh-124160: Pass main_tstate to update_global_state_for_extension() (GH-124164)
(cherry picked from commit 7331d0f70bc9fbac177b76b6ec03486430383425)

Co-authored-by: luk1337 <priv.luk@gmail.com>
Misc/NEWS.d/next/C_API/2024-09-18-18-40-30.gh-issue-124160.Zy-VKi.rst [new file with mode: 0644]
Programs/_testembed.c
Python/import.c

diff --git a/Misc/NEWS.d/next/C_API/2024-09-18-18-40-30.gh-issue-124160.Zy-VKi.rst b/Misc/NEWS.d/next/C_API/2024-09-18-18-40-30.gh-issue-124160.Zy-VKi.rst
new file mode 100644 (file)
index 0000000..26e7aef
--- /dev/null
@@ -0,0 +1,2 @@
+Fix crash when importing modules containing state and single-phase
+initialization in a subinterpreter.
index e341f0c6bfc59537bbf76271b07eea6f5931ba8e..96dbfabd7ed6bf54ff5cfb82af66a85a8272c48a 100644 (file)
@@ -94,6 +94,14 @@ static void _testembed_Py_Initialize(void)
 }
 
 
+static int test_import_in_subinterpreters(void)
+{
+    _testembed_Py_InitializeFromConfig();
+    PyThreadState_Swap(Py_NewInterpreter());
+    return PyRun_SimpleString("import readline"); // gh-124160
+}
+
+
 /*****************************************************
  * Test repeated initialisation and subinterpreters
  *****************************************************/
@@ -2184,6 +2192,7 @@ static struct TestCase TestCases[] = {
     {"test_repeated_init_exec", test_repeated_init_exec},
     {"test_repeated_simple_init", test_repeated_simple_init},
     {"test_forced_io_encoding", test_forced_io_encoding},
+    {"test_import_in_subinterpreters", test_import_in_subinterpreters},
     {"test_repeated_init_and_subinterpreters", test_repeated_init_and_subinterpreters},
     {"test_repeated_init_and_inittab", test_repeated_init_and_inittab},
     {"test_pre_initialization_api", test_pre_initialization_api},
index e0eb740901b58ae527026a0842a266daec1369f9..2ec596828e3e6fab5253f58ee14081907c49eff6 100644 (file)
@@ -2051,7 +2051,7 @@ import_run_extension(PyThreadState *tstate, PyModInitFunction p0,
                 singlephase.m_init = p0;
             }
             cached = update_global_state_for_extension(
-                    tstate, info->path, info->name, def, &singlephase);
+                    main_tstate, info->path, info->name, def, &singlephase);
             if (cached == NULL) {
                 assert(PyErr_Occurred());
                 goto main_finally;