diff options
author | Guido van Rossum <guido@python.org> | 2002-04-26 00:53:34 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2002-04-26 00:53:34 (GMT) |
commit | 93646981011b0795329888bf7d2d10097e899432 (patch) | |
tree | 869df4116ed907ed35df45bc8bf399fd7ba55588 | |
parent | cf22c826a68ccf33fa3f093f7dc9da956d69127e (diff) | |
download | cpython-93646981011b0795329888bf7d2d10097e899432.zip cpython-93646981011b0795329888bf7d2d10097e899432.tar.gz cpython-93646981011b0795329888bf7d2d10097e899432.tar.bz2 |
Make sure that tp_free frees the int the same way as tp_dealloc would.
This fixes the problem that Barry reported on python-dev:
>>> 23000 .__class__ = bool
crashes in the deallocator. This was because int inherited tp_free
from object, which uses the default allocator.
2.2. Bugfix candidate.
-rw-r--r-- | Objects/intobject.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/Objects/intobject.c b/Objects/intobject.c index 5886209..58a6beb 100644 --- a/Objects/intobject.c +++ b/Objects/intobject.c @@ -130,6 +130,13 @@ int_dealloc(PyIntObject *v) v->ob_type->tp_free((PyObject *)v); } +static void +int_free(PyIntObject *v) +{ + v->ob_type = (struct _typeobject *)free_list; + free_list = v; +} + long PyInt_AsLong(register PyObject *op) { @@ -905,6 +912,7 @@ PyTypeObject PyInt_Type = { 0, /* tp_init */ 0, /* tp_alloc */ int_new, /* tp_new */ + (freefunc)int_free, /* tp_free */ }; void |