https://github.com/python/cpython/commit/7331d0f70bc9fbac177b76b6ec03486430383425
commit: 7331d0f70bc9fbac177b76b6ec03486430383425
branch: main
author: luk1337 <[email protected]>
committer: kumaraditya303 <[email protected]>
date: 2024-09-19T21:35:20+05:30
summary:

gh-124160: Pass main_tstate to update_global_state_for_extension() (#124164)

files:
A Misc/NEWS.d/next/C_API/2024-09-18-18-40-30.gh-issue-124160.Zy-VKi.rst
M Programs/_testembed.c
M 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
index 00000000000000..26e7aef08ea4f3
--- /dev/null
+++ b/Misc/NEWS.d/next/C_API/2024-09-18-18-40-30.gh-issue-124160.Zy-VKi.rst
@@ -0,0 +1,2 @@
+Fix crash when importing modules containing state and single-phase
+initialization in a subinterpreter.
diff --git a/Programs/_testembed.c b/Programs/_testembed.c
index 342cc91cc58ced..10ee6b7be23e21 100644
--- a/Programs/_testembed.c
+++ b/Programs/_testembed.c
@@ -95,6 +95,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
  *****************************************************/
@@ -2398,6 +2406,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},
diff --git a/Python/import.c b/Python/import.c
index a5ea0e2f81df57..26ad84372cea68 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -2045,7 +2045,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;

_______________________________________________
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