2009/8/16 Joshua Haberman <jos...@reverberate.org>: > On Sun, Aug 16, 2009 at 3:37 PM, "Martin v. Löwis"<mar...@v.loewis.de> wrote: >>> So where does the Py_DECREF() for the above Py_INCREF() live? I >>> expected to find this code snippet somewhere, but couldn't: >>> >>> if (type->tp_flags & Py_TPFLAGS_HEAPTYPE) >>> Py_DECREF(type); >> >> For a regular heaptype, it's in subtype_dealloc: >> >> /* Can't reference self beyond this point */ >> Py_DECREF(type); > > Thanks for the pointer. I noticed that subtype_dealloc is only called for > types > that are allocated using type_new(). Does this mean that it is not > safe to create > types in C using just PyType_Ready() and set Py_TPFLAGS_HEAPTYPE on > them? The documentation is not clear on this point. > > Here is what I would like to do when I create my types dynamically: > > - implement tp_alloc and tp_dealloc() to INCREF and DECREF the type. > - not set Py_TPFLAGS_HEAPTYPE. > - set Py_TPFLAGS_HAVE_GC (because instances of my obj can create cycles)
[Note that this is really starting to get off topic for python-dev.] Why do you need to set Py_TPFLAGS_HEAPTYPE on your C type? Is a normal static type not sufficient? The easiest way to create heaptypes is to simply call PyType_Type. -- Regards, Benjamin _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com