diff --git a/mercurial/wireprotov2peer.py b/mercurial/wireprotov2peer.py --- a/mercurial/wireprotov2peer.py +++ b/mercurial/wireprotov2peer.py @@ -133,7 +133,12 @@ response = self._responses[frame.requestid] if action == 'responsedata': - self._processresponsedata(frame, meta, response) + # Any failures processing this frame should bubble up to the + # future tracking the request. + try: + self._processresponsedata(frame, meta, response) + except BaseException as e: + self._futures[frame.requestid].set_exception(e) else: raise error.ProgrammingError( 'unhandled action from clientreactor: %s' % action)