D5720: keepalive: implement _close_conn() so closes are known
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Sat Jan 26 22:34:06 UTC 2019
indygreg created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
Keepalives were not working on Python 3 because
http.client.HTTPResponse was refactored to call _close_conn()
instead of close(). Our custom close() is what returns inactive
connections to the available state.
We better support Python 3 by implementing a _close_conn().
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D5720
AFFECTED FILES
mercurial/keepalive.py
CHANGE DETAILS
diff --git a/mercurial/keepalive.py b/mercurial/keepalive.py
--- a/mercurial/keepalive.py
+++ b/mercurial/keepalive.py
@@ -403,14 +403,22 @@
_raw_read = httplib.HTTPResponse.read
_raw_readinto = getattr(httplib.HTTPResponse, 'readinto', None)
+ # Python 2.7 has a single close() which closes the socket handle.
+ # This method was effectively renamed to _close_conn() in Python 3. But
+ # there is also a close(). _close_conn() is called by methods like
+ # read().
+
def close(self):
if self.fp:
self.fp.close()
self.fp = None
if self._handler:
self._handler._request_closed(self, self._host,
self._connection)
+ def _close_conn(self):
+ self.close()
+
def close_connection(self):
self._handler._remove_connection(self._host, self._connection, close=1)
self.close()
To: indygreg, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list