More stuff discovered while writing the simplest of testcases:

tupledealloc(): only feed the free list when the type is really a
tuple, not a subtype.  Otherwise, use PyObject_GC_Del().

_PyTuple_Resize(): disallow using this for tuple subtypes.
This commit is contained in:
Guido van Rossum 2001-08-30 18:31:30 +00:00
parent 46add98758
commit 4b8c0f6d7d
1 changed files with 5 additions and 2 deletions

View File

@ -146,7 +146,10 @@ tupledealloc(register PyTupleObject *op)
while (--i >= 0)
Py_XDECREF(op->ob_item[i]);
#if MAXSAVESIZE > 0
if (len < MAXSAVESIZE && num_free_tuples[len] < MAXSAVEDTUPLES) {
if (len < MAXSAVESIZE &&
num_free_tuples[len] < MAXSAVEDTUPLES &&
op->ob_type == &PyTuple_Type)
{
op->ob_item[0] = (PyObject *) free_tuples[len];
num_free_tuples[len]++;
free_tuples[len] = op;
@ -594,7 +597,7 @@ _PyTuple_Resize(PyObject **pv, int newsize)
int sizediff;
v = (PyTupleObject *) *pv;
if (v == NULL || !PyTuple_Check(v) ||
if (v == NULL || v->ob_type != &PyTuple_Type ||
(v->ob_size != 0 && v->ob_refcnt != 1)) {
*pv = 0;
Py_XDECREF(v);