[Python-checkins] r78137 - in python/trunk: Lib/shelve.py Misc/NEWS

r.david.murray python-checkins at python.org
Wed Feb 10 23:42:04 CET 2010


Author: r.david.murray
Date: Wed Feb 10 23:42:04 2010
New Revision: 78137

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


Modified:
   python/trunk/Lib/shelve.py
   python/trunk/Misc/NEWS

Modified: python/trunk/Lib/shelve.py
==============================================================================
--- python/trunk/Lib/shelve.py	(original)
+++ python/trunk/Lib/shelve.py	Wed Feb 10 23:42:04 2010
@@ -145,7 +145,11 @@
             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'):

Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS	(original)
+++ python/trunk/Misc/NEWS	Wed Feb 10 23:42:04 2010
@@ -94,6 +94,9 @@
 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.


More information about the Python-checkins mailing list