[prev in list] [next in list] [prev in thread] [next in thread] 

List:       zope-db
Subject:    Re: [Zope-DB] Re: ZOracleDA and Oracle sessions: bug?
From:       "Matthew T. Kromer" <matt () zope ! com>
Date:       2002-10-14 14:40:45
[Download RAW message or body]

Bo M. Maryniuck wrote:

>On Monday 14 October 2002 16:17, Iain Bassam wrote:
>  
>
>>If you need to kill the sessions in Oracle, query v$session for the sid and
>>serial#. Then issue alter system kill session '<sid>,<serial#>';
>>    
>>
>
>Ugghhh... This is ugly solution. Also if I have a pool of connections and I 
>want remove not my own connection, but lots of others and this is impossible.
>
>2Matt:
>  
>
>>I suspect there's a cycle getting created somewhere, where the actual
>>connection object isn't being released.  Short of an explicit close() on
>>the connection object, the connection is actually only closed when the
>>connection object (the DCOracle2.py layer one) releases the C connection
>>object.
>>    
>>
>
>Hmmm... Hmm... Hm... Yes, seems that Zope still keeps the C object somewhere, 
>but I can't find where exactly. I've even tried to:
>
>	getattr(parent, myConn).manage_close_connection()
>	getattr(parent, myConn)._v_database_connection.cursor._cursor.close()
>	del getattr(parent, myConn)._v_connected
>	del getattr(parent, myConn)._v_database_connection
>
>...and session is still present. What I have to do to release the C object?
>
>  
>

Well, the problem probably is in the ZOracleDA code.

If you look at the db.py file, in the DB class, there's a __del__ method 
which tries to break cycles.  If you add to that method before the 
assigment to None a self.db.close() call, it will force the connection 
closed, regardless of what ever else may be using it.  The next thing 
that tries to use the closed connection will get an error.

-- 
Matt Kromer
Zope Corporation  http://www.zope.com/ 




[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic