Jeremy Hylton wrote: > On Fri, 2003-05-16 at 11:46, Jim Fulton wrote: > >>So given that we have a new style type, to add support for GC, we need >>to: >> >>- Set the Py_TPFLAGS_HAVE_GC type flag, >> >>- Provide implementations of tp_traverse and tp_clear, as described in >> the section "Supporting the Cycle Collector" section of the docs. >> >>- Call PyObject_GC_UnTrack at the beginning of the deallocator, >> before decrefing any members. >> >>I think that that is *all* we have to do. >> >>In particular, since we have a new style type that inherits the >>standard allocator, we don't need to fool with PyObject_GC_New, and >>PyObject_GC_DEL, because the default tp_alloc and tp_free take care of >>that for us. Similarly, we don't need to call PyObject_GC_Track, >>because that is done by the default allocator. (Because of that, our >>traverse function has to check for null object pointers in our >>object's members.) > > > It depends on how the objects are used in C code. I've upgraded a lot > of C extensions to make their types collectable recently. In several > cases, it was necessary to change PyObject_New to PyObject_GC_New and > add a PyObject_GC_Track. I think the docs ought to explain how to do > this. If you write types the New Way, there are no PyObject_New calls and no need to call PyObject_GC_Track. > It's not clear to me what the one right way to implement a tp_dealloc > slot is. I've seen two common patterns in the Python source: call > obj->ob_type->tp_free or call PyObject_GC_Del. The type object > initializes tp_free to PyObject_GC_Del, so in most cases the two > spellings are equivalent. Calling PyObject_GC_Del feels more > straightforward to me. You need to call obj->ob_type->tp_free to support subclassing. I suggest that every new type should call obj->ob_type->tp_free as a matter of course. Jim -- Jim Fulton mailto:jim@zope.com Python Powered! CTO (703) 361-1714 http://www.python.org Zope Corporation http://www.zope.com http://www.zope.org
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4