diff options
author | R. David Murray <rdmurray@bitdance.com> | 2010-02-11 00:15:05 (GMT) |
---|---|---|
committer | R. David Murray <rdmurray@bitdance.com> | 2010-02-11 00:15:05 (GMT) |
commit | 1f449143f48969067d6bd7bfec6d377e993d46a5 (patch) | |
tree | d144201c7bdda257318884b672b1864469557df9 /Lib/shelve.py | |
parent | 0b581e58f96a3ef66858d6efd762dbae849d766c (diff) | |
download | cpython-1f449143f48969067d6bd7bfec6d377e993d46a5.zip cpython-1f449143f48969067d6bd7bfec6d377e993d46a5.tar.gz cpython-1f449143f48969067d6bd7bfec6d377e993d46a5.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.
........
Diffstat (limited to 'Lib/shelve.py')
-rw-r--r-- | Lib/shelve.py | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/Lib/shelve.py b/Lib/shelve.py index fb2fa93..8271dfe 100644 --- a/Lib/shelve.py +++ b/Lib/shelve.py @@ -136,7 +136,11 @@ class Shelf(collections.MutableMapping): 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'): |