Merged revisions 78139 via svnmerge from
authorR. David Murray <rdmurray@bitdance.com>
Thu, 11 Feb 2010 00:25:17 +0000 (00:25 +0000)
committerR. David Murray <rdmurray@bitdance.com>
Thu, 11 Feb 2010 00:25:17 +0000 (00:25 +0000)
svn+ssh://pythondev@svn.python.org/python/branches/py3k

................
  r78139 | r.david.murray | 2010-02-10 19:15:05 -0500 (Wed, 10 Feb 2010) | 15 lines

  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.
  ........
................

Lib/shelve.py
Misc/NEWS

index fb2fa93b0100ae51c6a953374d7c2eeb254d7b55..8271dfeddca1914af60515172ad2ea7885ad6061 100644 (file)
@@ -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'):
index c5b971d3ade3027987a09089dc5976700bf450a4..054bb3d0b4a785f48c419a4eefa6daf8c2b1ad2a 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -79,6 +79,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #7835: shelve should no longer produce mysterious warnings during
+  interpreter shutdown.
+
 - Issue #6233: ElementTree failed converting unicode characters to XML
   entities when they could't be represented in the requested output
   encoding.  Patch by Jerry Chen.