]> granicus.if.org Git - python/commitdiff
Fix an uncollectable reference leak in bsddb.db.DBShelf.append
authorGregory P. Smith <greg@mad-scientist.com>
Sat, 13 Oct 2007 23:02:05 +0000 (23:02 +0000)
committerGregory P. Smith <greg@mad-scientist.com>
Sat, 13 Oct 2007 23:02:05 +0000 (23:02 +0000)
Lib/bsddb/dbshelve.py

index 33668f44ae469b50d77006d9462ac5db453d8421..f5f8b9a5cb894dac813283579b7c44ef04eba2c1 100644 (file)
@@ -93,6 +93,7 @@ class DBShelf(DictMixin):
     """
     def __init__(self, dbenv=None):
         self.db = db.DB(dbenv)
+        self._closed = True
         if HIGHEST_PROTOCOL:
             self.protocol = HIGHEST_PROTOCOL
         else:
@@ -138,6 +139,23 @@ class DBShelf(DictMixin):
             return self.db.keys()
 
 
+    def open(self, *args, **kwargs):
+        self.db.open(*args, **kwargs)
+        self._closed = False
+
+
+    def close(self, *args, **kwargs):
+        self.db.close(*args, **kwargs)
+        self._closed = True
+
+
+    def __repr__(self):
+        if self._closed:
+            return '<DBShelf @ 0x%x - closed>' % (id(self))
+        else:
+            return repr(dict(self.iteritems()))
+
+
     def items(self, txn=None):
         if txn != None:
             items = self.db.items(txn)
@@ -166,8 +184,7 @@ class DBShelf(DictMixin):
 
     def append(self, value, txn=None):
         if self.get_type() == db.DB_RECNO:
-            self.append = self.__append
-            return self.append(value, txn=txn)
+            return self.__append(value, txn=txn)
         raise DBShelveError, "append() only supported when dbshelve opened with filetype=dbshelve.db.DB_RECNO"