]> granicus.if.org Git - python/commitdiff
Fix #11116 fix on Windows (close file before removing in MH code)
authorR. David Murray <rdmurray@bitdance.com>
Sat, 12 Feb 2011 00:03:31 +0000 (00:03 +0000)
committerR. David Murray <rdmurray@bitdance.com>
Sat, 12 Feb 2011 00:03:31 +0000 (00:03 +0000)
Lib/mailbox.py

index 928e795cdeec9fb97281ce26abad8e0b937cba59..2a0d321c94e766b91ffee8a25c08bb72f55c837f 100644 (file)
@@ -910,6 +910,7 @@ class MH(Mailbox):
             new_key = max(keys) + 1
         new_path = os.path.join(self._path, str(new_key))
         f = _create_carefully(new_path)
+        closed = False
         try:
             if self._locked:
                 _lock_file(f)
@@ -917,6 +918,11 @@ class MH(Mailbox):
                 try:
                     self._dump_message(message, f)
                 except BaseException:
+                    # Unlock and close so it can be deleted on Windows
+                    if self._locked:
+                        _unlock_file(f)
+                    _sync_close(f)
+                    closed = True
                     os.remove(new_path)
                     raise
                 if isinstance(message, MHMessage):
@@ -925,7 +931,8 @@ class MH(Mailbox):
                 if self._locked:
                     _unlock_file(f)
         finally:
-            _sync_close(f)
+            if not closed:
+                _sync_close(f)
         return new_key
 
     def remove(self, key):