bpo-44263: Fix _decimal and _testcapi GC protocol (GH-26464)

* _testcapi.heapgctype: implement a traverse function since the type
  is defined with Py_TPFLAGS_HAVE_GC.
* _decimal: PyDecSignalDictMixin_Type is no longer defined with
  Py_TPFLAGS_HAVE_GC since it has no traverse function.
This commit is contained in:
Victor Stinner 2021-05-31 13:10:31 +02:00 committed by GitHub
parent d1124b09e8
commit 142e5c5445
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 2 deletions

View File

@ -696,8 +696,7 @@ static PyTypeObject PyDecSignalDictMixin_Type =
PyObject_GenericGetAttr, /* tp_getattro */
(setattrofunc) 0, /* tp_setattro */
(PyBufferProcs *) 0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE|
Py_TPFLAGS_HAVE_GC, /* tp_flags */
Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
0, /* tp_doc */
0, /* tp_traverse */
0, /* tp_clear */

View File

@ -6548,6 +6548,13 @@ heapctype_init(PyObject *self, PyObject *args, PyObject *kwargs)
return 0;
}
static int
heapgcctype_traverse(HeapCTypeObject *self, visitproc visit, void *arg)
{
Py_VISIT(Py_TYPE(self));
return 0;
}
static void
heapgcctype_dealloc(HeapCTypeObject *self)
{
@ -6561,6 +6568,7 @@ static PyType_Slot HeapGcCType_slots[] = {
{Py_tp_init, heapctype_init},
{Py_tp_members, heapctype_members},
{Py_tp_dealloc, heapgcctype_dealloc},
{Py_tp_traverse, heapgcctype_traverse},
{Py_tp_doc, (char*)heapgctype__doc__},
{0, 0},
};