sshpeer: try harder to snag stderr when stdout closes unexpectedly stable
authorAugie Fackler <augie@google.com>
Thu, 13 Apr 2017 16:09:40 -0400
branchstable
changeset 32062 ad6c5497cd15
parent 32061 6e0368b6e0bb
child 32063 befefdd34cf8
sshpeer: try harder to snag stderr when stdout closes unexpectedly Resolves test failures on FreeBSD, but I'm not happy about the fix. A previous version of this also wrapped readline by putting the hack in the _call method on doublepipe. That was confusing for readers and wasn't necessary - just doing this on read() is sufficient to fix the bugs I'm observing. We can always come back and do readline later if needed.
mercurial/sshpeer.py
--- a/mercurial/sshpeer.py	Thu Apr 20 22:51:28 2017 +0900
+++ b/mercurial/sshpeer.py	Thu Apr 13 16:09:40 2017 -0400
@@ -91,7 +91,15 @@
         return self._call('write', data)
 
     def read(self, size):
-        return self._call('read', size)
+        r = self._call('read', size)
+        if size != 0 and not r:
+            # We've observed a condition that indicates the
+            # stdout closed unexpectedly. Check stderr one
+            # more time and snag anything that's there before
+            # letting anyone know the main part of the pipe
+            # closed prematurely.
+            _forwardoutput(self._ui, self._side)
+        return r
 
     def readline(self):
         return self._call('readline')