From a06e74f2ccb79eda274e06ce9a2963676b9556d4 Mon Sep 17 00:00:00 2001 From: Rudi Heitbaum Date: Thu, 10 Nov 2022 02:38:29 +0000 Subject: [PATCH] Python3: GH-99205: Mark new interpreters and threads as non-static patch upstream patch: - GH-99205 - Should be included in Python 3.11.1 --- ...terpreters-and-threads-as-non-static.patch | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 packages/lang/Python3/patches/Python3-0401-fix-Mark-new-interpreters-and-threads-as-non-static.patch diff --git a/packages/lang/Python3/patches/Python3-0401-fix-Mark-new-interpreters-and-threads-as-non-static.patch b/packages/lang/Python3/patches/Python3-0401-fix-Mark-new-interpreters-and-threads-as-non-static.patch new file mode 100644 index 0000000000..c2fcaba4b2 --- /dev/null +++ b/packages/lang/Python3/patches/Python3-0401-fix-Mark-new-interpreters-and-threads-as-non-static.patch @@ -0,0 +1,62 @@ +From 27763ef6ac5ad9d70dba68bf9c2c910ef1ddcded Mon Sep 17 00:00:00 2001 +From: Brandt Bucher +Date: Wed, 9 Nov 2022 13:55:20 -0800 +Subject: [PATCH] GH-99205: Mark new interpreters and threads as non-static + (GH-99268) (cherry picked from commit + 283ab0e1c002f2d7459d581df6b4b8599e7d1a4d) + +Co-authored-by: Brandt Bucher +--- + .../2022-11-08-16-35-25.gh-issue-99205.2YOoFT.rst | 2 ++ + Python/pystate.c | 8 ++++++++ + 2 files changed, 10 insertions(+) + create mode 100644 Misc/NEWS.d/next/Core and Builtins/2022-11-08-16-35-25.gh-issue-99205.2YOoFT.rst + +diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-11-08-16-35-25.gh-issue-99205.2YOoFT.rst b/Misc/NEWS.d/next/Core and Builtins/2022-11-08-16-35-25.gh-issue-99205.2YOoFT.rst +new file mode 100644 +index 000000000000..8ad0e147c203 +--- /dev/null ++++ b/Misc/NEWS.d/next/Core and Builtins/2022-11-08-16-35-25.gh-issue-99205.2YOoFT.rst +@@ -0,0 +1,2 @@ ++Fix an issue that prevented :c:type:`PyThreadState` and ++:c:type:`PyInterpreterState` memory from being freed properly. +diff --git a/Python/pystate.c b/Python/pystate.c +index 425065322ebd..c0d161f894c9 100644 +--- a/Python/pystate.c ++++ b/Python/pystate.c +@@ -341,6 +341,7 @@ PyInterpreterState_New(void) + interp = &runtime->_main_interpreter; + assert(interp->id == 0); + assert(interp->next == NULL); ++ assert(interp->_static); + + interpreters->main = interp; + } +@@ -355,6 +356,9 @@ PyInterpreterState_New(void) + // Set to _PyInterpreterState_INIT. + memcpy(interp, &initial._main_interpreter, + sizeof(*interp)); ++ // We need to adjust any fields that are different from the initial ++ // interpreter (as defined in _PyInterpreterState_INIT): ++ interp->_static = false; + + if (id < 0) { + /* overflow or Py_Initialize() not called yet! */ +@@ -817,6 +821,7 @@ new_threadstate(PyInterpreterState *interp) + assert(id == 1); + used_newtstate = 0; + tstate = &interp->_initial_thread; ++ assert(tstate->_static); + } + else { + // Every valid interpreter must have at least one thread. +@@ -828,6 +833,9 @@ new_threadstate(PyInterpreterState *interp) + memcpy(tstate, + &initial._main_interpreter._initial_thread, + sizeof(*tstate)); ++ // We need to adjust any fields that are different from the initial ++ // thread (as defined in _PyThreadState_INIT): ++ tstate->_static = false; + } + interp->threads.head = tstate; +