summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeil Schemenauer <nascheme@enme.ucalgary.ca>2002-03-29 03:05:54 (GMT)
committerNeil Schemenauer <nascheme@enme.ucalgary.ca>2002-03-29 03:05:54 (GMT)
commitf589c059f4101f700c08841df828758b1c8dcda0 (patch)
treeee655452788e13558e68abf11d352177ee8cb14c
parentb883310d59a2b44f502f191186ba40a3689d11ee (diff)
downloadcpython-f589c059f4101f700c08841df828758b1c8dcda0.zip
cpython-f589c059f4101f700c08841df828758b1c8dcda0.tar.gz
cpython-f589c059f4101f700c08841df828758b1c8dcda0.tar.bz2
If the GC is enabled then don't use the ob_type pointer to create a list
of trash objects. Use the gc_prev pointer instead.
-rw-r--r--Objects/object.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/Objects/object.c b/Objects/object.c
index 6ec8c8b..396f734 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -2037,6 +2037,7 @@ PyObject * _PyTrash_delete_later = NULL;
void
_PyTrash_deposit_object(PyObject *op)
{
+#ifndef WITH_CYCLE_GC
int typecode;
if (PyTuple_Check(op))
@@ -2054,8 +2055,11 @@ _PyTrash_deposit_object(PyObject *op)
return; /* pacify compiler -- execution never here */
}
op->ob_refcnt = typecode;
-
op->ob_type = (PyTypeObject*)_PyTrash_delete_later;
+#else
+ assert (_Py_AS_GC(op)->gc.gc_next == NULL);
+ _Py_AS_GC(op)->gc.gc_prev = (PyGC_Head *)_PyTrash_delete_later;
+#endif
_PyTrash_delete_later = op;
}
@@ -2064,6 +2068,8 @@ _PyTrash_destroy_chain(void)
{
while (_PyTrash_delete_later) {
PyObject *shredder = _PyTrash_delete_later;
+
+#ifndef WITH_CYCLE_GC
_PyTrash_delete_later = (PyObject*) shredder->ob_type;
switch (shredder->ob_refcnt) {
@@ -2083,6 +2089,11 @@ _PyTrash_destroy_chain(void)
shredder->ob_type = &PyTraceBack_Type;
break;
}
+#else
+ _PyTrash_delete_later =
+ (PyObject*) _Py_AS_GC(shredder)->gc.gc_prev;
+#endif
+
_Py_NewReference(shredder);
++_PyTrash_delete_nesting;