tracing: ignore any IOErrors when writing to pipe
authorAugie Fackler <augie@google.com>
Sat, 01 Sep 2018 11:33:17 -0400
changeset 39397 452790284a15
parent 39396 f57682dca1c1
child 39398 8ab79580047f
tracing: ignore any IOErrors when writing to pipe When the pager forks off the main process, we can end up with the pipe closed prematurely. Rather than break hg entirely when that happens and tracing is active, just let lingering events disappear as needed. Differential Revision: https://phab.mercurial-scm.org/D4445
hgdemandimport/tracing.py
--- a/hgdemandimport/tracing.py	Sat Sep 01 11:06:47 2018 -0400
+++ b/hgdemandimport/tracing.py	Sat Sep 01 11:33:17 2018 -0400
@@ -28,7 +28,17 @@
         _session = os.environ.get('HGCATAPULTSESSION', 'none')
     whence = whencefmt % whenceargs
     try:
-        _pipe.write('START %s %s\n' % (_session, whence))
+        # Both writes to the pipe are wrapped in try/except to ignore
+        # errors, as we can see mysterious errors in here if the pager
+        # is active. Presumably other conditions could trigger
+        # problems too.
+        try:
+            _pipe.write('START %s %s\n' % (_session, whence))
+        except IOError:
+            pass
         yield
     finally:
-        _pipe.write('END %s %s\n' % (_session, whence))
+        try:
+            _pipe.write('END %s %s\n' % (_session, whence))
+        except IOError:
+            pass