sshpeer: run the ssh command unbuffered
authorPierre-Yves David <pierre-yves.david@fb.com>
Wed, 20 May 2015 11:31:38 -0500
changeset 25408 c88975a4d264
parent 25407 e461230cc95b
child 25409 95e042d77a5f
sshpeer: run the ssh command unbuffered This is necessary to use non-blocking IO base on polling. Such polling is needed to restore real time output with ssh peer. Changeset fce065538bcf is talking about 5x regression on Mac OS X when playing with this value. So we introduced our own buffering layer in previous changesets. This seems to keep the regression away (we are even issuing much less read).
mercurial/sshpeer.py
--- a/mercurial/sshpeer.py	Sun May 31 00:00:36 2015 -0700
+++ b/mercurial/sshpeer.py	Wed May 20 11:31:38 2015 -0500
@@ -87,7 +87,12 @@
 
         # while self.subprocess isn't used, having it allows the subprocess to
         # to clean up correctly later
-        self.pipeo, self.pipei, self.pipee, self.subprocess = util.popen4(cmd)
+        #
+        # no buffer allow the use of 'select'
+        # feel free to remove buffering and select usage when we ultimately
+        # move to threading.
+        sub = util.popen4(cmd, bufsize=0)
+        self.pipeo, self.pipei, self.pipee, self.subprocess = sub
 
         self.pipei = util.bufferedinputpipe(self.pipei)