[Python-Dev] gcmodule issue w/adding __del__ to generator objects
Phillip J. Eby
pje at telecommunity.com
Sun Jun 19 00:00:46 CEST 2005
Argh! My email client's shortcut for Send is Ctrl-E, which is the same as
end-of-line in the editor I've been using all day. Anyway, the problem is
that it seems to me as though actually checking for tp_del is too
aggressive (conservative?) for generators, because sometimes a generator
object is finished or un-started, and therefore can't resurrect objects
during close(). However, I don't really know how to implement another
strategy; gcmodule isn't exactly my forte. :) Any input from the GC gurus
would be appreciated. Thanks!
At 05:56 PM 6/18/2005 -0400, Phillip J. Eby wrote:
>At 05:50 PM 6/18/2005 -0400, Phillip J. Eby wrote:
> >Working on the PEP 342/343 generator enhancements, I've got working
> >send/throw/close() methods, but am not sure how to deal with getting
> >__del__ to invoke close(). Naturally, I can add a "__del__" entry to its
> >methods list easily enough, but the 'has_finalizer()' function in
> >gcmodule.c only checks for a __del__ attribute on instance objects, and for
> >tp_del on heap types.
> >
> >It looks to me like the correct fix would be to check for tp_del always,
> >not just on heap types. However, when I tried this, I started getting
> >warnings from the tests, saying that 22 uncollectable objects were being
> >created (all generators, in test_generators).
> >
> >It seems that the tests create cycles via globals(), since they define a
> >bunch of generator functions and then call them, saving the generator
> >iterators (or objects that reference them) in global variables
> >
> >after investigating this a bit, it seems to me that either has_finalizer()
> >needs to
>
>Whoops. I hit send by accident. Anyway, the issue seems to mostly be that
>the tests create generator-iterators in global variables. With a bit of
>effort, I've been able to stomp most of the cycles.
More information about the Python-Dev
mailing list