[Python-Dev] A little GC confusion

David Abrahams David Abrahams" <david.abrahams@rcn.com
Fri, 22 Feb 2002 08:07:28 -0500


----- Original Message -----
From: "David Abrahams" <david.abrahams@rcn.com>

> ----- Original Message -----
> From: "Martin v. Loewis" <martin@v.loewis.de>

> > Because the type type implements tp_is_gc (typeobject.c:1378),
> > declaring static type objects as not being gc. In turn, garbage
> > collection will not attempt to look at the GC header of these type
> > objects.
>
>
> Aha! And the implementation is...
>
> static int
> type_is_gc(PyTypeObject *type)
> {
>     return type->tp_flags & Py_TPFLAGS_HEAPTYPE;
> }
>
> so, wouldn't it make more sense that the Python source always checks
> Py_TPFLAGS_HEAPTYPE before tp_is_gc?

Nice try, but no cigar I'm afraid: copying the tp_is_gc slot from
PyType_Type into my metatype before PyType_Ready() doesn't prevent the
crash.

Does anyone really understand what happens here?