diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2015-04-10 10:24:41 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2015-04-10 10:24:41 (GMT) |
commit | 7e7a3dba5fd4262269f713dfe21ba7e4746fc2dd (patch) | |
tree | a0777a3e70ae76f294fac756c684ec4e24d5df1d /Lib/xmlrpc | |
parent | 842f00e72509db50957ceb00d289b305dbc5a0a5 (diff) | |
download | cpython-7e7a3dba5fd4262269f713dfe21ba7e4746fc2dd.zip cpython-7e7a3dba5fd4262269f713dfe21ba7e4746fc2dd.tar.gz cpython-7e7a3dba5fd4262269f713dfe21ba7e4746fc2dd.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/xmlrpc')
-rw-r--r-- | Lib/xmlrpc/client.py | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/Lib/xmlrpc/client.py b/Lib/xmlrpc/client.py index e8c1944..4521325 100644 --- a/Lib/xmlrpc/client.py +++ b/Lib/xmlrpc/client.py @@ -446,8 +446,13 @@ class ExpatParser: self._parser.Parse(data, 0) def close(self): - self._parser.Parse("", 1) # end of data - del self._target, self._parser # get rid of circular references + try: + parser = self._parser + except AttributeError: + pass + else: + del self._target, self._parser # get rid of circular references + parser.Parse(b"", True) # end of data # -------------------------------------------------------------------- # XML-RPC marshalling and unmarshalling code @@ -1079,8 +1084,10 @@ class GzipDecodedResponse(gzip.GzipFile if gzip else object): gzip.GzipFile.__init__(self, mode="rb", fileobj=self.io) def close(self): - gzip.GzipFile.close(self) - self.io.close() + try: + gzip.GzipFile.close(self) + finally: + self.io.close() # -------------------------------------------------------------------- @@ -1235,9 +1242,10 @@ class Transport: # Used in the event of socket errors. # def close(self): - if self._connection[1]: - self._connection[1].close() + host, connection = self._connection + if connection: self._connection = (None, None) + connection.close() ## # Send HTTP request. |