Commit 774a66de authored by R. David Murray's avatar R. David Murray

Fix #11116 fix on Windows (close file before removing in MH code)

parent fc14114c
...@@ -910,6 +910,7 @@ class MH(Mailbox): ...@@ -910,6 +910,7 @@ class MH(Mailbox):
new_key = max(keys) + 1 new_key = max(keys) + 1
new_path = os.path.join(self._path, str(new_key)) new_path = os.path.join(self._path, str(new_key))
f = _create_carefully(new_path) f = _create_carefully(new_path)
closed = False
try: try:
if self._locked: if self._locked:
_lock_file(f) _lock_file(f)
...@@ -917,6 +918,11 @@ class MH(Mailbox): ...@@ -917,6 +918,11 @@ class MH(Mailbox):
try: try:
self._dump_message(message, f) self._dump_message(message, f)
except BaseException: 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) os.remove(new_path)
raise raise
if isinstance(message, MHMessage): if isinstance(message, MHMessage):
...@@ -925,7 +931,8 @@ class MH(Mailbox): ...@@ -925,7 +931,8 @@ class MH(Mailbox):
if self._locked: if self._locked:
_unlock_file(f) _unlock_file(f)
finally: finally:
_sync_close(f) if not closed:
_sync_close(f)
return new_key return new_key
def remove(self, key): def remove(self, key):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment