diff --git a/src/ZODB/Connection.py b/src/ZODB/Connection.py index d1722b866..45b53b996 100644 --- a/src/ZODB/Connection.py +++ b/src/ZODB/Connection.py @@ -283,8 +283,7 @@ def close(self, primary=True): raise ConnectionStateError("Cannot close a connection joined to " "a transaction") - if self._cache is not None: - self._cache.incrgc() # This is a good time to do some GC + self._cache.incrgc() # This is a good time to do some GC # Call the close callbacks. if self.__onCloseCallbacks is not None: @@ -924,8 +923,7 @@ def open(self, transaction_manager=None, delegate=True): transaction_manager.registerSynch(self) - if self._cache is not None: - self._cache.incrgc() # This is a good time to do some GC + self._cache.incrgc() # This is a good time to do some GC if delegate: # delegate open to secondary connections @@ -951,7 +949,7 @@ def _release_resources(self): c._storage.release() c._storage = c._normal_storage = None c._cache = PickleCache(self, 0, 0) - c.transaction_manager = None + c.close(False) ########################################################################## # Python protocol diff --git a/src/ZODB/DB.py b/src/ZODB/DB.py index 5a47d26cf..5da9fb543 100644 --- a/src/ZODB/DB.py +++ b/src/ZODB/DB.py @@ -24,7 +24,7 @@ from ZODB.broken import find_global from ZODB.utils import z64 -from ZODB.Connection import Connection, TransactionMetaData +from ZODB.Connection import Connection, TransactionMetaData, noop from ZODB._compat import Pickler, _protocol, BytesIO import ZODB.serialize @@ -646,15 +646,15 @@ def close(self): is closed, so they stop behaving usefully. Perhaps close() should also close all the Connections. """ - noop = lambda *a: None self.close = noop @self._connectionMap - def _(c): - if c.transaction_manager is not None: - c.transaction_manager.abort() - c.afterCompletion = c.newTransaction = c.close = noop - c._release_resources() + def _(conn): + if conn.transaction_manager is not None: + for c in six.itervalues(conn.connections): + c.explicit_transactions = True + conn.transaction_manager.abort() + conn._release_resources() self._mvcc_storage.close() del self.storage