From: Fred Drake Date: Fri, 26 Oct 2001 17:56:51 +0000 (+0000) Subject: Be smarter about clearing the weakref lists for instances, instance methods, X-Git-Tag: v2.2.1c1~1027 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c916f5a390b0ca559de54a15d4014e18792674ea;p=python 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. --- diff --git a/Objects/classobject.c b/Objects/classobject.c index 622ca5821a..4522097ac8 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 89dd7f9d91..d978c3f07e 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);