wireprotov2peer: always return a bool from _processredirect()
Without this, we may stop servicing the redirect response if the
future has already been resolved. And the future will often be
resolved very early, since many consumers iterate the decoded
CBOR object stream and expect data to lazily arrive.
--- a/mercurial/wireprotov2peer.py Tue Nov 20 18:47:19 2018 -0500
+++ b/mercurial/wireprotov2peer.py Wed Nov 28 10:37:43 2018 -0800
@@ -458,7 +458,10 @@
self._redirects.append((requestid, res))
def _processredirect(self, rid, res):
- """Called to continue processing a response from a redirect."""
+ """Called to continue processing a response from a redirect.
+
+ Returns a bool indicating if the redirect is still serviceable.
+ """
response = self._responses[rid]
try:
@@ -470,7 +473,7 @@
response._oninputcomplete()
if rid not in self._futures:
- return
+ return bool(data)
if response.command not in COMMAND_DECODERS:
self._futures[rid].set_result(response.objects())