From: Gregory P. Smith Date: Sat, 13 Oct 2007 23:02:05 +0000 (+0000) Subject: Fix an uncollectable reference leak in bsddb.db.DBShelf.append X-Git-Tag: v2.6a1~1188 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5d743fd187f59ef792373e026f0de4ada63a3387;p=python Fix an uncollectable reference leak in bsddb.db.DBShelf.append --- diff --git a/Lib/bsddb/dbshelve.py b/Lib/bsddb/dbshelve.py index 33668f44ae..f5f8b9a5cb 100644 --- a/Lib/bsddb/dbshelve.py +++ b/Lib/bsddb/dbshelve.py @@ -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 '' % (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"