Mercurial > hg
changeset 40723:94b0d0f996e1 stable
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.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Wed, 28 Nov 2018 10:37:43 -0800 |
parents | 25b7c4cb5de1 |
children | 15a643304728 |
files | mercurial/wireprotov2peer.py |
diffstat | 1 files changed, 5 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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())