mirror of
https://github.com/python/cpython.git
synced 2025-08-30 21:48:47 +00:00
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.
This commit is contained in:
commit
2116b12da5
27 changed files with 315 additions and 209 deletions
|
@ -438,8 +438,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
|
||||
|
@ -1065,8 +1070,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()
|
||||
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
|
@ -1221,9 +1228,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.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue