static void
lru_list_elem_dealloc(lru_list_elem *link)
{
- _PyObject_GC_UNTRACK(link);
Py_XDECREF(link->key);
Py_XDECREF(link->result);
- PyObject_GC_Del(link);
-}
-
-static int
-lru_list_elem_traverse(lru_list_elem *link, visitproc visit, void *arg)
-{
- Py_VISIT(link->key);
- Py_VISIT(link->result);
- return 0;
-}
-
-static int
-lru_list_elem_clear(lru_list_elem *link)
-{
- Py_CLEAR(link->key);
- Py_CLEAR(link->result);
- return 0;
+ PyObject_Del(link);
}
static PyTypeObject lru_list_elem_type = {
0, /* tp_getattro */
0, /* tp_setattro */
0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */
- 0, /* tp_doc */
- (traverseproc)lru_list_elem_traverse, /* tp_traverse */
- (inquiry)lru_list_elem_clear, /* tp_clear */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
};
}
} else {
/* Put result in a new link at the front of the queue. */
- link = (lru_list_elem *)PyObject_GC_New(lru_list_elem,
- &lru_list_elem_type);
+ link = (lru_list_elem *)PyObject_New(lru_list_elem,
+ &lru_list_elem_type);
if (link == NULL) {
Py_DECREF(key);
Py_DECREF(result);
link->hash = hash;
link->key = key;
link->result = result;
- _PyObject_GC_TRACK(link);
if (_PyDict_SetItem_KnownHash(self->cache, key, (PyObject *)link,
hash) < 0) {
Py_DECREF(link);
lru_list_elem *link = self->root.next;
while (link != &self->root) {
lru_list_elem *next = link->next;
- Py_VISIT(link);
+ Py_VISIT(link->key);
+ Py_VISIT(link->result);
link = next;
}
Py_VISIT(self->maxsize_O);