Skip to content

Commit

Permalink
GH-115776: Static object are immortal, so mark them as such. (GH-117673)
Browse files Browse the repository at this point in the history
  • Loading branch information
markshannon committed Apr 16, 2024
1 parent cff0a2d commit c053d52
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 10 deletions.
17 changes: 7 additions & 10 deletions Include/object.h
Expand Up @@ -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) \
{ \
Expand All @@ -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) \
{ \
Expand Down
@@ -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.

0 comments on commit c053d52

Please sign in to comment.