On Mon, 05 Aug 2013 21:32:54 +0200 Stefan Behnel <stefan...@behnel.de> wrote: > > >> Hmm, it seems to me by now that the only safe way of handling this is to > >> let each tp_dealloc() level in the hierarchy call tp_finalize() through > >> PyObject_CallFinalizerFromDealloc(), instead of calling up the stack in > >> tp_finalize(). Otherwise, it's a bit fragile for arbitrary tp_dealloc() > >> functions in base types and subtypes. > > I think I got confused here. PyObject_CallFinalizerFromDealloc() works on > the object, not the type. So it can't be used to call anything but the > bottom-most tp_finalize().
Well, the bottom-most tp_finalize() is responsible for calling the upper ones, if it wants to. > > I'm not following you. Why is it "a bit fragile" to call the base > > tp_finalize from a derived tp_finalize? It should actually be totally > > safe, since tp_finalize is a regular function called in a safe > > environment (unlike tp_dealloc and tp_del). > > As long as there is not OWTDI, you can't really make safe assumption about > the way a super type's tp_finalize() and tp_dealloc() play together. The > details definitely need to be spelled out here. I'd be glad to make the spec more explicit if needed, but first you need to tell me if the current behaviour is ok, or if you need something else (within the boundaries of backwards compatibility and reasonable expectations, though: i.e. no implicit recursion through the __mro__). Regards Antoine. _______________________________________________ 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