summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorR. David Murray <rdmurray@bitdance.com>2010-02-10 22:42:04 (GMT)
committerR. David Murray <rdmurray@bitdance.com>2010-02-10 22:42:04 (GMT)
commit63e4fd7eef8d2da09634e9416dd29fc28d8b8620 (patch)
tree68d971fb24ac4ba9a23a0ee5b8735cf5530a0d8e
parent8f6a28702961430a2217be64d9d53e2ea490f1b3 (diff)
downloadcpython-63e4fd7eef8d2da09634e9416dd29fc28d8b8620.zip
cpython-63e4fd7eef8d2da09634e9416dd29fc28d8b8620.tar.gz
cpython-63e4fd7eef8d2da09634e9416dd29fc28d8b8620.tar.bz2
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.
-rw-r--r--Lib/shelve.py6
-rw-r--r--Misc/NEWS3
2 files changed, 8 insertions, 1 deletions
diff --git a/Lib/shelve.py b/Lib/shelve.py
index fb41c84..8055f42 100644
--- a/Lib/shelve.py
+++ b/Lib/shelve.py
@@ -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'):
diff --git a/Misc/NEWS b/Misc/NEWS
index 2eccbab..0d86fe7 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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.