# HG changeset patch # User Gregory Szorc # Date 2018-11-28 18:37:43 # 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())