Dan Pozmanter wrote:
Sure thing:
I was mucking around in _Acquisition.c with getattr, findattr, etc,
and I noticed checked to see if my code was leaky.
It was! I then checked just vanilla code, and found the same
leak (only much much smaller).
So here is what I did to make things more visible:
In Wrapper_getattro, I simply added a while loop,
and another call to Wrapper_findattr before the return statement "
return Wrapper_findattr(self, oname, NULL, NULL, NULL, 1, 1, 0, 0);".
Loop it 1000 times for some fireworks, 5 times for a more modest
display.
Looping other calls (such as Wrapper_acquire before " return
Wrapper_acquire(self, oname, filter, extra, orig, explicit,
containment);" in Wrapper_findattr)
does not produce a similar leak.
So. To reproduce:
Edit _Acquisition.c
Function Wrapper_getattro
add
" int i = 0;"
at the top.
then, if self->obj ... and all that, add:
"
while (i < xyz) {
Wrapper_findattr(self, oname, NULL, NULL, NULL, 1, 1, 0, 0);
i++;
}
"
Wrapper_findattr (like, for example, PyObject_GetAttr) returns a
*new* reference to the result of the attribute access. So this would,
of course, cause a leak. If you have code that is calling Wrapper_findattr
and not taking care of the new reference, then it is not surprizing that
you have a leak.
Jim
--
Jim Fulton mailto:[EMAIL PROTECTED] Python Powered!
CTO (540) 361-1714 http://www.python.org
Zope Corporation http://www.zope.com http://www.zope.org
_______________________________________________
Zope-Dev maillist - Zope-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )