22 Feb
2002
22 Feb
'02
8:07 a.m.
----- Original Message -----
From: "David Abrahams"
----- Original Message ----- From: "Martin v. Loewis"
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?