# HG changeset patch
# User Gregory Szorc <gregory.sz...@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())
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to