From c916f5a390b0ca559de54a15d4014e18792674ea Mon Sep 17 00:00:00 2001 From: Fred Drake Date: Fri, 26 Oct 2001 17:56:51 +0000 Subject: Be smarter about clearing the weakref lists for instances, instance methods, and functions: we only need to call PyObject_ClearWeakRefs() if the weakref list is non-NULL. Since these objects are common but weakrefs are still unusual, saving the call at deallocation time makes a lot of sense. --- Objects/classobject.c | 6 ++++-- Objects/funcobject.c | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Objects/classobject.c b/Objects/classobject.c index 622ca58..4522097 100644 --- a/Objects/classobject.c +++ b/Objects/classobject.c @@ -585,7 +585,8 @@ instance_dealloc(register PyInstanceObject *inst) extern long _Py_RefTotal; #endif _PyObject_GC_UNTRACK(inst); - PyObject_ClearWeakRefs((PyObject *) inst); + if (inst->in_weakreflist != NULL) + PyObject_ClearWeakRefs((PyObject *) inst); /* Temporarily resurrect the object. */ #ifdef Py_TRACE_REFS @@ -2071,7 +2072,8 @@ static void instancemethod_dealloc(register PyMethodObject *im) { _PyObject_GC_UNTRACK(im); - PyObject_ClearWeakRefs((PyObject *)im); + if (im->im_weakreflist != NULL) + PyObject_ClearWeakRefs((PyObject *)im); Py_DECREF(im->im_func); Py_XDECREF(im->im_self); Py_XDECREF(im->im_class); diff --git a/Objects/funcobject.c b/Objects/funcobject.c index 89dd7f9..d978c3f 100644 --- a/Objects/funcobject.c +++ b/Objects/funcobject.c @@ -270,7 +270,8 @@ static void func_dealloc(PyFunctionObject *op) { _PyObject_GC_UNTRACK(op); - PyObject_ClearWeakRefs((PyObject *) op); + if (op->func_weakreflist != NULL) + PyObject_ClearWeakRefs((PyObject *) op); Py_DECREF(op->func_code); Py_DECREF(op->func_globals); Py_DECREF(op->func_name); -- cgit v0.12