summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Schultz <aschultz@redhat.com>2019-08-02 08:20:56 -0600
committerPete Zaitcev <zaitcev@kotori.zaitcev.us>2019-12-08 20:11:17 -0600
commit1f26c5736949e1c3b57c024a315e33fc419f126e (patch)
tree7b772b87ac992a193170350f2dab8f18dfdc9f69
parent4f320bd0345e8790a634f5713b1ed77ae3271c54 (diff)
downloadpython-swiftclient-1f26c5736949e1c3b57c024a315e33fc419f126e.tar.gz
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
-rw-r--r--swiftclient/client.py9
1 files changed, 9 insertions, 0 deletions
diff --git a/swiftclient/client.py b/swiftclient/client.py
index 4be2e2d..448bb46 100644
--- a/swiftclient/client.py
+++ b/swiftclient/client.py
@@ -438,6 +438,15 @@ class HTTPConnection(object):
if 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):
"""Final wrapper before requests call, to be patched in tests"""
return self.request_session.request(*arg, **kwarg)