From c053d52edd1e05ccc339e380b705749a3240d645 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Tue, 16 Apr 2024 12:51:41 +0100 Subject: [PATCH] GH-115776: Static object are immortal, so mark them as such. (GH-117673) --- Include/object.h | 17 +++++++---------- ...24-04-09-11-31-25.gh-issue-115776.5Nthd0.rst | 2 ++ 2 files changed, 9 insertions(+), 10 deletions(-) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2024-04-09-11-31-25.gh-issue-115776.5Nthd0.rst diff --git a/Include/object.h b/Include/object.h index 13443329dfb5a2..ffcacf1a3ef4ed 100644 --- a/Include/object.h +++ b/Include/object.h @@ -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 index 00000000000000..5fc0080bcb9551 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2024-04-09-11-31-25.gh-issue-115776.5Nthd0.rst @@ -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.