Commit 63e4fd7e authored by R. David Murray's avatar R. David Murray

Issue 7835: Shelve's __del__ method calls its close method, and its

close method refers to an identifier in the global module namespace.
This means that when __del__ is called during interpreter shutdown (if,
for example, the calling program still has a pointer to the shelf),
sometimes that global identifier would wind up being None, causing
mysterious 'ignored' exceptions.  This patch checks for the possible None
value first before using the global, thus avoiding the error messages.
parent 8f6a2870
......@@ -145,7 +145,11 @@ class Shelf(UserDict.DictMixin):
self.dict.close()
except AttributeError:
pass
self.dict = _ClosedDict()
# _ClosedDict can be None when close is called from __del__ during shutdown
if _ClosedDict is None:
self.dict = None
else:
self.dict = _ClosedDict()
def __del__(self):
if not hasattr(self, 'writeback'):
......
......@@ -94,6 +94,9 @@ Core and Builtins
Library
-------
- Issue #7835: shelve should no longer produce mysterious warnings during
interpreter shutdown.
- Issue #2746: Don't escape ampersands and angle brackets ("&", "<", ">")
in XML processing instructions and comments. These raw characters are
allowed by the XML specification, and are necessary when outputting e.g.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment