From 7e7a3dba5fd4262269f713dfe21ba7e4746fc2dd Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 10 Apr 2015 13:24:41 +0300 Subject: 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. --- Lib/ftplib.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'Lib/ftplib.py') diff --git a/Lib/ftplib.py b/Lib/ftplib.py index cd8c1a987e..4d92b86d5e 100644 --- a/Lib/ftplib.py +++ b/Lib/ftplib.py @@ -667,11 +667,16 @@ class FTP: def close(self): '''Close the connection without assuming anything about it.''' - if self.file is not None: - self.file.close() - if self.sock is not None: - self.sock.close() - self.file = self.sock = None + try: + file = self.file + self.file = None + if file is not None: + file.close() + finally: + sock = self.sock + self.sock = None + if sock is not None: + sock.close() try: import ssl -- cgit v1.2.1