]> granicus.if.org Git - python/commitdiff
Merged revisions 78137 via svnmerge from
authorR. David Murray <rdmurray@bitdance.com>
Wed, 10 Feb 2010 22:47:57 +0000 (22:47 +0000)
committerR. David Murray <rdmurray@bitdance.com>
Wed, 10 Feb 2010 22:47:57 +0000 (22:47 +0000)
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.
........

Lib/shelve.py
Misc/NEWS

index fb41c844e4fa51760bf087756d02bbf580c12e48..8055f42e2291fb4ffa4fac27ab7feb566d0ce4a4 100644 (file)
@@ -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'):
index ac7230bffbda63153096b6aa9a95b936028ed3f7..9ef096035d58937676f318814e0af3bf3f08a9f2 100644 (file)
--- 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