]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
GH-115776: Static object are immortal, so mark them as such. (GH-117673)
authorMark Shannon <mark@hotpy.org>
Tue, 16 Apr 2024 11:51:41 +0000 (12:51 +0100)
committerGitHub <noreply@github.com>
Tue, 16 Apr 2024 11:51:41 +0000 (12:51 +0100)
Include/object.h
Misc/NEWS.d/next/Core and Builtins/2024-04-09-11-31-25.gh-issue-115776.5Nthd0.rst [new file with mode: 0644]

index 13443329dfb5a2488669ff96e726996a0e1d1561..ffcacf1a3ef4ed9a1e76e9c2480bcfba0bfd152e 100644 (file)
@@ -115,8 +115,11 @@ check by comparing the reference count field to the immortality reference count.
 // Kept for backward compatibility. It was needed by Py_TRACE_REFS build.
 #define _PyObject_EXTRA_INIT
 
-// Make all internal uses of PyObject_HEAD_INIT immortal while preserving the
-// C-API expectation that the refcnt will be set to 1.
+/* Make all uses of PyObject_HEAD_INIT immortal.
+ *
+ * Statically allocated objects might be shared between
+ * interpreters, so must be marked as immortal.
+ */
 #if defined(Py_GIL_DISABLED)
 #define PyObject_HEAD_INIT(type)    \
     {                               \
@@ -128,19 +131,13 @@ check by comparing the reference count field to the immortality reference count.
         0,                          \
         (type),                     \
     },
-#elif defined(Py_BUILD_CORE)
+#else
 #define PyObject_HEAD_INIT(type)    \
     {                               \
         { _Py_IMMORTAL_REFCNT },    \
         (type)                      \
     },
-#else
-#define PyObject_HEAD_INIT(type) \
-    {                            \
-        { 1 },                   \
-        (type)                   \
-    },
-#endif /* Py_BUILD_CORE */
+#endif
 
 #define PyVarObject_HEAD_INIT(type, size) \
     {                                     \
diff --git a/Misc/NEWS.d/next/Core and Builtins/2024-04-09-11-31-25.gh-issue-115776.5Nthd0.rst b/Misc/NEWS.d/next/Core and Builtins/2024-04-09-11-31-25.gh-issue-115776.5Nthd0.rst
new file mode 100644 (file)
index 0000000..5fc0080
--- /dev/null
@@ -0,0 +1,2 @@
+Statically allocated objects are, by definition, immortal so must be
+marked as such regardless of whether they are in extension modules or not.