Cleanup session on delete

If an external http connection was not passed into the client, we
create one with a requests.Session() on our own. Once this is used,
it may still have an open socket when the connection is closed. We need
to handle the closing of the requests.Session() ourselves if we created
one. If you do not close it, a ResourceWarning may be reported about the
socket that is left open.

Change-Id: I200ad0cdc8b7999c3f5521b9a822122bd18714bf
Closes-Bug: #1838775
This commit is contained in:
Alex Schultz 2019-08-02 08:20:56 -06:00 committed by Pete Zaitcev
parent 4f320bd034
commit 1f26c57369
1 changed files with 9 additions and 0 deletions

View File

@ -438,6 +438,15 @@ class HTTPConnection(object):
if timeout: if timeout:
self.requests_args['timeout'] = timeout self.requests_args['timeout'] = timeout
def __del__(self):
"""Cleanup resources other than memory"""
if self.request_session:
# The session we create must be closed to free up file descriptors
try:
self.request_session.close()
finally:
self.request_session = None
def _request(self, *arg, **kwarg): def _request(self, *arg, **kwarg):
"""Final wrapper before requests call, to be patched in tests""" """Final wrapper before requests call, to be patched in tests"""
return self.request_session.request(*arg, **kwarg) return self.request_session.request(*arg, **kwarg)