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