[PATCH 1 of 2 STABLE] wireprotov2peer: always return a bool from _processredirect()

Gregory Szorc gregory.szorc at gmail.com
Wed Nov 28 20:56:21 UTC 2018


# HG changeset patch
# User Gregory Szorc <gregory.szorc at gmail.com>
# Date 1543430263 28800
#      Wed Nov 28 10:37:43 2018 -0800
# Branch stable
# Node ID 94b0d0f996e11aece0d601201f074c5a9eb0e741
# Parent  25b7c4cb5de1593e16bbd7a7dafbd28baa743995
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.

diff --git a/mercurial/wireprotov2peer.py b/mercurial/wireprotov2peer.py
--- a/mercurial/wireprotov2peer.py
+++ b/mercurial/wireprotov2peer.py
@@ -458,7 +458,10 @@ class clienthandler(object):
         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 @@ class clienthandler(object):
                 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())


More information about the Mercurial-devel mailing list