Re: Re: Leak in zope.component?

Jim Fulton <[email protected]>
Newsgroups gmane.comp.web.zope.zope3
Message-ID <[email protected]>
On Aug 23, 2007, at 1:53 AM, Christian Zagrodnick wrote:

> 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?

I don't know what you mean.  I ran my example interactively.  What  
happens when you run my example interactively?

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
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.