Mercurial > cpython-lru_cache-weakref
diff Objects/tupleobject.c @ 13183:54bffdddc0ef legacy-trunk
final patches from Neil Schemenauer for garbage collection
| author | Jeremy Hylton <jeremy@alum.mit.edu> |
|---|---|
| date | Fri, 30 Jun 2000 05:02:53 +0000 |
| parents | 8f79c5b69e0a |
| children | 916fb024ce94 |
line wrap: on
line diff
--- a/Objects/tupleobject.c Fri Jun 30 04:59:59 2000 +0000 +++ b/Objects/tupleobject.c Fri Jun 30 05:02:53 2000 +0000 @@ -94,7 +94,7 @@ /* Check for overflow */ if (nbytes / sizeof(PyObject *) != (size_t)size || (nbytes += sizeof(PyTupleObject) - sizeof(PyObject *) - + PyGC_INFO_SIZE) + + PyGC_HEAD_SIZE) <= 0) { return PyErr_NoMemory(); @@ -103,7 +103,7 @@ op = (PyTupleObject *) PyObject_MALLOC(nbytes); if (op == NULL) return PyErr_NoMemory(); - + op = (PyTupleObject *) PyObject_FROM_GC(op); PyObject_INIT_VAR(op, &PyTuple_Type, size); } for (i = 0; i < size; i++) @@ -115,6 +115,7 @@ Py_INCREF(op); /* extra INCREF so that this is never freed */ } #endif + PyObject_GC_Init(op); return (PyObject *) op; } @@ -181,6 +182,7 @@ register int i; register int len = op->ob_size; Py_TRASHCAN_SAFE_BEGIN(op) + PyObject_GC_Fini(op); if (len > 0) { i = len; while (--i >= 0) @@ -453,7 +455,7 @@ PyObject_HEAD_INIT(&PyType_Type) 0, "tuple", - sizeof(PyTupleObject) - sizeof(PyObject *) + PyGC_INFO_SIZE, + sizeof(PyTupleObject) - sizeof(PyObject *) + PyGC_HEAD_SIZE, sizeof(PyObject *), (destructor)tupledealloc, /*tp_dealloc*/ (printfunc)tupleprint, /*tp_print*/ @@ -557,12 +559,27 @@ } else #endif { +#ifdef WITH_CYCLE_GC + PyGC_Head *g = PyObject_AS_GC((PyObject *)v); + PyObject_GC_Fini((PyObject *)v); + sv = (PyTupleObject *) + PyObject_REALLOC((char *)g, sizeof(PyTupleObject) + + PyGC_HEAD_SIZE + + newsize * sizeof(PyObject *)); + if (g == NULL) { + sv = NULL; + } else { + sv = (PyTupleObject *)PyObject_FROM_GC(g); + } +#else sv = (PyTupleObject *) PyObject_REALLOC((char *)v, sizeof(PyTupleObject) - + PyGC_INFO_SIZE + + PyGC_HEAD_SIZE + newsize * sizeof(PyObject *)); +#endif *pv = (PyObject *) sv; if (sv == NULL) { + PyObject_GC_Init((PyObject *)v); PyObject_DEL(v); PyErr_NoMemory(); return -1; @@ -578,6 +595,7 @@ sv->ob_item[i - sizediff] = NULL; } } + PyObject_GC_Init(sv); sv->ob_size = newsize; return 0; }
