implement tp_clear
diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c
index 311c6df..061204e 100644
--- a/Modules/_functoolsmodule.c
+++ b/Modules/_functoolsmodule.c
@@ -355,6 +355,15 @@
     return 0;
 }
 
+static int
+keyobject_clear(keyobject *ko)
+{
+    Py_CLEAR(ko->cmp);
+    if (ko->object)
+        Py_CLEAR(ko->object);
+    return 0;
+}
+
 static PyMemberDef keyobject_members[] = {
     {"obj", T_OBJECT,
      offsetof(keyobject, object), 0,
@@ -392,7 +401,7 @@
     Py_TPFLAGS_DEFAULT,                 /* tp_flags */
     0,                                  /* tp_doc */
     (traverseproc)keyobject_traverse,   /* tp_traverse */
-    0,                                  /* tp_clear */
+    (inquiry)keyobject_clear,           /* tp_clear */
     keyobject_richcompare,              /* tp_richcompare */
     0,                                  /* tp_weaklistoffset */
     0,                                  /* tp_iter */