summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorR. David Murray <rdmurray@bitdance.com>2010-02-10 22:47:57 (GMT)
committerR. David Murray <rdmurray@bitdance.com>2010-02-10 22:47:57 (GMT)
commit2070be82cd91847b415c646b16393d8b1dfddabc (patch)
tree5bf362ae827deb39230f412121b1ae6064969e83
parent8ed66ed7123d7dba0b99bf8e9f1efa1780625c0e (diff)
downloadcpython-2070be82cd91847b415c646b16393d8b1dfddabc.zip
cpython-2070be82cd91847b415c646b16393d8b1dfddabc.tar.gz
cpython-2070be82cd91847b415c646b16393d8b1dfddabc.tar.bz2
Merged revisions 78137 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r78137 | r.david.murray | 2010-02-10 17:42:04 -0500 (Wed, 10 Feb 2010) | 8 lines 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 ac7230b..9ef0960 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -66,6 +66,9 @@ Core and Builtins
Library
-------
+- Issue #7835: shelve should no longer produce mysterious warnings during
+ interpreter shutdown.
+
- Issue #4772: Raise a ValueError when an unknown Bluetooth protocol is
specified, rather than fall through to AF_PACKET (in the `socket` module).
Also, raise ValueError rather than TypeError when an unknown TIPC address