diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2010-03-31 21:32:15 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2010-03-31 21:32:15 (GMT) |
commit | a57df2cf1d627840dff505e8487fbd5f42414c7b (patch) | |
tree | 87d099bca7fc01072ad6911e9ffa79707b982704 /Objects/classobject.c | |
parent | 26cc99da2a350f3093c9d7055794daef2034e2a4 (diff) | |
download | cpython-a57df2cf1d627840dff505e8487fbd5f42414c7b.zip cpython-a57df2cf1d627840dff505e8487fbd5f42414c7b.tar.gz cpython-a57df2cf1d627840dff505e8487fbd5f42414c7b.tar.bz2 |
Issue #8268: Old-style classes (not just instances) now support weak
references.
Diffstat (limited to 'Objects/classobject.c')
-rw-r--r-- | Objects/classobject.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/Objects/classobject.c b/Objects/classobject.c index 3f51c0f..032d354 100644 --- a/Objects/classobject.c +++ b/Objects/classobject.c @@ -123,6 +123,7 @@ alloc_error: op->cl_dict = dict; Py_XINCREF(name); op->cl_name = name; + op->cl_weakreflist = NULL; op->cl_getattr = class_lookup(op, getattrstr, &dummy); op->cl_setattr = class_lookup(op, setattrstr, &dummy); @@ -188,6 +189,8 @@ static void class_dealloc(PyClassObject *op) { _PyObject_GC_UNTRACK(op); + if (op->cl_weakreflist != NULL) + PyObject_ClearWeakRefs((PyObject *) op); Py_DECREF(op->cl_bases); Py_DECREF(op->cl_dict); Py_XDECREF(op->cl_name); @@ -454,7 +457,7 @@ PyTypeObject PyClass_Type = { (traverseproc)class_traverse, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ + offsetof(PyClassObject, cl_weakreflist), /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ 0, /* tp_methods */ |