diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2015-04-10 10:24:10 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2015-04-10 10:24:10 (GMT) |
commit | 1aa2c0f073bdbed4fa824591d53e20bbf3d01add (patch) | |
tree | 30091bc4164edcf2d192126e5db59392a3078793 /Lib/xmlrpclib.py | |
parent | c26afcc8fce54b8c920c21e2faf1259a92f4aa1f (diff) | |
download | cpython-1aa2c0f073bdbed4fa824591d53e20bbf3d01add.zip cpython-1aa2c0f073bdbed4fa824591d53e20bbf3d01add.tar.gz cpython-1aa2c0f073bdbed4fa824591d53e20bbf3d01add.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/xmlrpclib.py')
-rw-r--r-- | Lib/xmlrpclib.py | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/Lib/xmlrpclib.py b/Lib/xmlrpclib.py index 340dc51..db185a6 100644 --- a/Lib/xmlrpclib.py +++ b/Lib/xmlrpclib.py @@ -558,8 +558,13 @@ else: 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("", 1) # end of data class SlowParser: """Default XML parser (based on xmllib.XMLParser).""" @@ -1214,8 +1219,10 @@ class GzipDecodedResponse(gzip.GzipFile if gzip else object): gzip.GzipFile.__init__(self, mode="rb", fileobj=self.stringio) def close(self): - gzip.GzipFile.close(self) - self.stringio.close() + try: + gzip.GzipFile.close(self) + finally: + self.stringio.close() # -------------------------------------------------------------------- @@ -1384,9 +1391,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 request header. |