# HG changeset patch # User Sylvain Thénault # Date 1244212544 -7200 # Node ID 277e8d3b1154ff6260e8556c0160f20f6e2ac32e # Parent fb156d69bfd9ba7cdf99ceb16f1391d8e7012a5f fix potential race-condition diff -r fb156d69bfd9 -r 277e8d3b1154 server/session.py --- a/server/session.py Fri Jun 05 13:21:31 2009 +0200 +++ b/server/session.py Fri Jun 05 16:35:44 2009 +0200 @@ -156,12 +156,13 @@ if self._closed: raise Exception('try to set pool on a closed session') if self.pool is None: + # get pool first to avoid race-condition self._threaddata.pool = self.repo._get_pool() try: self._threaddata.pool.pool_set(self) except: + self._threaddata.pool = None self.repo._free_pool(self.pool) - self._threaddata.pool = None raise self._threads_in_transaction.add(threading.currentThread()) return self._threaddata.pool @@ -174,9 +175,10 @@ if self.pool is not None and self.mode == 'read': # even in read mode, we must release the current transaction self._threads_in_transaction.remove(threading.currentThread()) - self.repo._free_pool(self.pool) self.pool.pool_reset(self) self._threaddata.pool = None + # free pool once everything is done to avoid race-condition + self.repo._free_pool(self.pool) def system_sql(self, sql, args=None): """return a sql cursor on the system database"""