Cyclic garbage collection and segfaults...

Tim Peters tim.one at comcast.net
Wed Jan 14 20:24:40 EST 2004


[Simon Burton]
> In my extensions python seems to segfault in the GC most of all...

That's quite likely:  gc is the only part of the system that routinely
crawls over every container in existence, so is supremely sensitive to all
manner of common C coding errors (wild stores, buffer overruns,
uninitialized memory, mixing calls to different memory subsystems on a
single object, and failure to follow the GC protocols).

> Just yesterday I removed a malloc that was (why??) causing a segfault.

Well, you certainly can't use the system malloc to obtain memory and expect
Python's garbage collection to manage it -- for gc'ed extension types, the
memory must be gotten via PyObject_GC_New() or PyObject_GC_NewVar(), and you
have to follow all the other rules too.  If you haven't read and understood
the "Supporting Cyclic Garbage Collection" section of the Python/C API
manual, you're going to get lots of segfaults.  But if you follow the rules,
you shouldn't get any.  Remember too that this is C code, not Python code,
so the result of not following a rule is more likely to be a nasty crash
than a friendly exception.





More information about the Python-list mailing list