From e14c39291bb55ba336cb3fc2c44224154c8500c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Fri, 12 Jul 2013 23:01:07 +0200 Subject: [PATCH] ui: Ignore SIGPIPE and catch `system-error' exceptions. * guix/ui.scm (initialize-guix): Call `sigaction'. (call-with-error-handling): Wrap `thunk' in a (catch 'system-error ...). --- guix/ui.scm | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/guix/ui.scm b/guix/ui.scm index fd35c6a8c8..2ee8c02306 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -120,6 +120,11 @@ messages." "Perform the usual initialization for stand-alone Guix commands." (install-locale) (textdomain "guix") + + ;; Ignore SIGPIPE. If the daemon closes the connection, we prefer to be + ;; notified via an EPIPE later. + (sigaction SIGPIPE SIG_IGN) + (setvbuf (current-output-port) _IOLBF) (setvbuf (current-error-port) _IOLBF)) @@ -171,7 +176,12 @@ General help using GNU software: ")) ;; FIXME: Server-provided error messages aren't i18n'd. (leave (_ "build failed: ~a~%") (nix-protocol-error-message c)))) - (thunk))) + ;; Catch EPIPE and the likes. + (catch 'system-error + thunk + (lambda args + (leave (_ "~a~%") + (strerror (system-error-errno args))))))) (define (read/eval-package-expression str) "Read and evaluate STR and return the package it refers to, or exit an