[Python-Dev] nested classes leaking in compiler

Georg Brandl g.brandl at gmx.net
Fri Mar 28 19:01:46 CET 2008


Amaury Forgeot d'Arc schrieb:
> On Fri, Mar 28, 2008 at 11:50 AM, Georg Brandl <g.brandl at gmx.net> wrote:
>> While preparing the Python-AST compilation patch, I noticed that each
>>  class nested in a class leaks one reference (2.5 and trunk).
>>
>>  It wasn't found by regrtest -R because it only happens on compiling,
>>  and it seems that all snippets compiled during the tests as opposed to
>>  on import didn't contain such a construct.
>>
>>  The AST generation stage is fine, the leak happens somehwere
>>  after that (I suspect the symtable code). It would be nice if someone
>>  who understands more about that code than I do could fix this.
> 
> The problem is actually in compile.c, in compiler_class():
> Each compilation scope holds the name of the enclosing class (for
> __name mangling).
> In the case of nested classes, the inner scope is first initialized
> with the outer class name, then replaced with the inner class name.
> But a Py_XDECREF(c->u->u_private) is missing here...
> 
> I will submit the correction in a few hours.

Somehow I knew you'd be the one to find the problem :)

Georg

-- 
Thus spake the Lord: Thou shalt indent with four spaces. No more, no less.
Four shall be the number of spaces thou shalt indent, and the number of thy
indenting shall be four. Eight shalt thou not indent, nor either indent thou
two, excepting that thou then proceed to four. Tabs are right out.



More information about the Python-Dev mailing list