From 19a001f339681dc36d4fb97ad6d528e80fad517d Mon Sep 17 00:00:00 2001
From: Shane Hathaway <shane@hathawaymix.org>
Date: Tue, 14 Jan 2003 15:20:22 +0000
Subject: [PATCH] Fixed the _resetCache() bug.  The garbage collection
 attributes weren't being updated, which resulted in one whole cache being
 kept for no reason.

---
 src/ZODB/Connection.py     |  5 +++--
 src/ZODB/tests/testZODB.py | 15 +++++++++++++++
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/ZODB/Connection.py b/src/ZODB/Connection.py
index c738339e..fbf53857 100644
--- a/src/ZODB/Connection.py
+++ b/src/ZODB/Connection.py
@@ -13,7 +13,7 @@
 ##############################################################################
 """Database connection support
 
-$Id: Connection.py,v 1.80 2002/12/03 18:36:29 jeremy Exp $"""
+$Id: Connection.py,v 1.81 2003/01/14 15:20:21 shane Exp $"""
 
 from cPickleCache import PickleCache
 from POSException import ConflictError, ReadConflictError
@@ -217,7 +217,8 @@ class Connection(ExportImport.ExportImport):
         self._code_timestamp = global_code_timestamp
         self._invalidated.clear()
         orig_cache = self._cache
-        self._cache = PickleCache(self, orig_cache.cache_size)
+        self._cache = cache = PickleCache(self, orig_cache.cache_size)
+        self._incrgc = self.cacheGC = cache.incrgc
 
     def abort(self, object, transaction):
         """Abort the object in the transaction.
diff --git a/src/ZODB/tests/testZODB.py b/src/ZODB/tests/testZODB.py
index e9afe945..4719aee3 100644
--- a/src/ZODB/tests/testZODB.py
+++ b/src/ZODB/tests/testZODB.py
@@ -117,6 +117,21 @@ class ZODBTests(unittest.TestCase, ExportImportTests):
         self._db.abortVersion("version")
         get_transaction().commit()
 
+    def checkResetCache(self):
+        # The cache size after a reset should be 0 and the GC attributes
+        # ought to be linked to it rather than the old cache.
+        conn = self._db.open()
+        try:
+            conn.root()
+            self.assert_(len(conn._cache) > 0)  # Precondition
+            conn._resetCache()
+            self.assertEqual(len(conn._cache), 0)
+            self.assert_(conn._incrgc == conn._cache.incrgc)
+            self.assert_(conn.cacheGC == conn._cache.incrgc)
+        finally:
+            conn.close()
+        
+
 def test_suite():
     return unittest.makeSuite(ZODBTests, 'check')
 
-- 
2.30.9