From 93646981011b0795329888bf7d2d10097e899432 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Fri, 26 Apr 2002 00:53:34 +0000 Subject: 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. --- Objects/intobject.c | 8 ++++++++ 1 file changed, 8 insertions(+) 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 -- cgit v0.12