diff mercurial/commandserver.py @ 46087:ac9de799d390

commandserver: handle IOError related to flushing of streams After dispatch, without chg we have handling of flushing of streams and exception handling related to it. The exception handling part is important because there can be exceptions when flushing fout or ferr. One such case is in `test-basic.t` which was failing on python3+chg without this patch as this handling was missing from chg. Failure can be seen at https://foss.heptapod.net/octobus/mercurial-devel/-/jobs/128399 Honestly I am not sure which one of `chgserver.py` or `commandserver.py` the change should go in. Differential Revision: https://phab.mercurial-scm.org/D9517
author Pulkit Goyal <7895pulkit@gmail.com>
date Thu, 03 Dec 2020 17:18:49 +0530
parents 89a2afe31e82
children 49b6910217f9
line wrap: on
line diff
--- a/mercurial/commandserver.py	Wed Dec 02 14:27:45 2020 +0530
+++ b/mercurial/commandserver.py	Thu Dec 03 17:18:49 2020 +0530
@@ -355,7 +355,18 @@
         )
 
         try:
-            ret = self._dispatchcommand(req) & 255
+            err = None
+            try:
+                status = self._dispatchcommand(req)
+            except error.StdioError as e:
+                status = -1
+                err = e
+
+            retval = dispatch.closestdio(req.ui, err)
+            if retval:
+                status = retval
+
+            ret = status & 255
             # If shutdown-on-interrupt is off, it's important to write the
             # result code *after* SIGINT handler removed. If the result code
             # were lost, the client wouldn't be able to continue processing.