summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2021-05-28 14:26:07 (GMT)
committerGitHub <noreply@github.com>2021-05-28 14:26:07 (GMT)
commit1c0106ca8c72d671ad4e2b553489d786d06fce03 (patch)
tree59810714c1768ae222fbbb07d7f6f228da353b01 /Modules
parenteb8ab04dd7fe6bb9a4eefb5e60d7b6ca887e0148 (diff)
downloadcpython-1c0106ca8c72d671ad4e2b553489d786d06fce03.zip
cpython-1c0106ca8c72d671ad4e2b553489d786d06fce03.tar.gz
cpython-1c0106ca8c72d671ad4e2b553489d786d06fce03.tar.bz2
bpo-42972: Fully implement GC protocol for functools LRU cache (GH-26423)
(cherry picked from commit 3f8d33252722750e6c019d3df7ce0fabf7bdd45e) Co-authored-by: Erlend Egeberg Aasland <erlend.aasland@innova.no>
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_functoolsmodule.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c
index b028f8f..218a8d1 100644
--- a/Modules/_functoolsmodule.c
+++ b/Modules/_functoolsmodule.c
@@ -1255,8 +1255,8 @@ static int
lru_cache_tp_clear(lru_cache_object *self)
{
lru_list_elem *list = lru_cache_unlink_list(self);
- Py_CLEAR(self->func);
Py_CLEAR(self->cache);
+ Py_CLEAR(self->func);
Py_CLEAR(self->kwd_mark);
Py_CLEAR(self->lru_list_elem_type);
Py_CLEAR(self->cache_info_type);
@@ -1342,15 +1342,17 @@ lru_cache_deepcopy(PyObject *self, PyObject *unused)
static int
lru_cache_tp_traverse(lru_cache_object *self, visitproc visit, void *arg)
{
+ Py_VISIT(Py_TYPE(self));
lru_list_elem *link = self->root.next;
while (link != &self->root) {
lru_list_elem *next = link->next;
Py_VISIT(link->key);
Py_VISIT(link->result);
+ Py_VISIT(Py_TYPE(link));
link = next;
}
- Py_VISIT(self->func);
Py_VISIT(self->cache);
+ Py_VISIT(self->func);
Py_VISIT(self->kwd_mark);
Py_VISIT(self->lru_list_elem_type);
Py_VISIT(self->cache_info_type);