diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2015-04-10 10:29:28 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2015-04-10 10:29:28 (GMT) |
commit | 2116b12da59f77358cc539b90f58a3cdea43c2fd (patch) | |
tree | 693d26652b1dbf8b2ac058c5725f9726c3d14a0b /Lib/mailbox.py | |
parent | fcbf8f3e3d46eb023dd9a3954c6f9ed9a533d427 (diff) | |
parent | 7e7a3dba5fd4262269f713dfe21ba7e4746fc2dd (diff) | |
download | cpython-2116b12da59f77358cc539b90f58a3cdea43c2fd.zip cpython-2116b12da59f77358cc539b90f58a3cdea43c2fd.tar.gz cpython-2116b12da59f77358cc539b90f58a3cdea43c2fd.tar.bz2 |
Issue #23865: close() methods in multiple modules now are idempotent and more
robust at shutdown. If needs to release multiple resources, they are released
even if errors are occured.
Diffstat (limited to 'Lib/mailbox.py')
-rw-r--r-- | Lib/mailbox.py | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/Lib/mailbox.py b/Lib/mailbox.py index e7f31df..24d4aec 100644 --- a/Lib/mailbox.py +++ b/Lib/mailbox.py @@ -722,10 +722,14 @@ class _singlefileMailbox(Mailbox): def close(self): """Flush and close the mailbox.""" - self.flush() - if self._locked: - self.unlock() - self._file.close() # Sync has been done by self.flush() above. + try: + self.flush() + finally: + try: + if self._locked: + self.unlock() + finally: + self._file.close() # Sync has been done by self.flush() above. def _lookup(self, key=None): """Return (start, stop) or raise KeyError.""" @@ -1966,9 +1970,11 @@ class _ProxyFile: def close(self): """Close the file.""" if hasattr(self, '_file'): - if hasattr(self._file, 'close'): - self._file.close() - del self._file + try: + if hasattr(self._file, 'close'): + self._file.close() + finally: + del self._file def _read(self, size, read_method): """Read size bytes using read_method.""" |