diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2021-05-31 11:25:47 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-31 11:25:47 (GMT) |
commit | 7fe9cad606a4ac7ac138528dcd19546394bc5a44 (patch) | |
tree | 230627a810fdd70badafe4a008333e3456f2f67c | |
parent | f097d2302be46b031687726011b86fc241a042ef (diff) | |
download | cpython-7fe9cad606a4ac7ac138528dcd19546394bc5a44.zip cpython-7fe9cad606a4ac7ac138528dcd19546394bc5a44.tar.gz cpython-7fe9cad606a4ac7ac138528dcd19546394bc5a44.tar.bz2 |
bpo-44263: Fix _decimal and _testcapi GC protocol (GH-26464) (GH-26465)
* _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.
(cherry picked from commit 142e5c5445c019542246d93fe2f9e195d3131686)
Co-authored-by: Victor Stinner <vstinner@python.org>
Co-authored-by: Victor Stinner <vstinner@python.org>
-rw-r--r-- | Modules/_decimal/_decimal.c | 3 | ||||
-rw-r--r-- | Modules/_testcapimodule.c | 8 |
2 files changed, 9 insertions, 2 deletions
diff --git a/Modules/_decimal/_decimal.c b/Modules/_decimal/_decimal.c index 9b89fa4..e2979a5 100644 --- a/Modules/_decimal/_decimal.c +++ b/Modules/_decimal/_decimal.c @@ -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 */ diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index d926ad8..c759dcc 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -6595,6 +6595,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) { @@ -6608,6 +6615,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}, }; |