Re: Leak in zope.component?

Christian Zagrodnick <[email protected]>
Newsgroups gmane.comp.web.zope.zope3
Message-ID <[email protected]>
On 2007-08-22 16:12:42 +0200, Jim Fulton <[email protected]> said:

> 
> On Aug 22, 2007, at 8:16 AM, Christian Zagrodnick wrote:
> 
>> Hi,
>> 
>> I'm doing things wich z3c.zalchemy and trying to find out why my  
>> database connections are kept open  even after unregistering  
>> everything.
>> 
>> Given the following very simple test:
>> 
>>>>> import sys
>>>>> import zope.component
>>>>> import zope.interface
>>>>> class IUtil(zope.interface.Interface):
>> ...     pass
>> 
>>>>> gsm = zope.component.getGlobalSiteManager()
>>>>> utility = object()
>>>>> sys.getrefcount(utility)
>> 2
>>>>> gsm.registerUtility(utility, IUtil)
>>>>> sys.getrefcount(utility)
>> 6
>> 
>>>>> gsm.unregisterUtility(utility, IUtil)
>> True
>>>>> sys.getrefcount(utility)  # this fails
>> 2
>> 
>> ----------------------------------------------------------------------
>> File "/Users/zagy/development/z3c.zalchemy/src/z3c/zalchemy/tests/ 
>> dispose.txt", line 17, in dispose.txt
>> Failed example:
>>    sys.getrefcount(utility)  # this fails
>> Expected:
>>    2
>> Got:
>>    4
>> 
>> 
>> 
>> So there are now two more references than before register/ unregister. 
>> Am I missing something? Or is it leaking somewhere?
> 
> Here's what I get with the trunk of zope.component:
> 
> jim@ds9:~/p/zope/component/trunk$ bin/py
> 
>  >>> import sys, zope.component, zope.interface
>  >>> class IUtil(zope.interface.Interface): pass
> ...
>  >>> gsm = zope.component.getGlobalSiteManager()
>  >>> utility = object(); sys.getrefcount(utility)
> 2
>  >>> gsm.registerUtility(utility, IUtil); sys.getrefcount(utility)
> 5
>  >>> gsm.unregisterUtility(utility, IUtil); sys.getrefcount(utility)
> True
> 2
> 
> So I can't reproduce what you are seeing.
> 
> Try adding:
> 
>     >>> import gc; gc.collect()
> 
> before your last getrefcount call.

That doesn't change a thing. Could it be the testrunner having an eye 
on registrations?

-- 
Christian Zagrodnick

gocept gmbh & co. kg  ·  forsterstrasse 29 · 06112 halle/saale
www.gocept.com · fon. +49 345 12298894 · fax. +49 345 12298891
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.