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 ...).
This commit is contained in:
Ludovic Courtès 2013-07-12 23:01:07 +02:00
parent e3ccdf9e96
commit e14c39291b
1 changed files with 11 additions and 1 deletions

View File

@ -120,6 +120,11 @@ messages."
"Perform the usual initialization for stand-alone Guix commands." "Perform the usual initialization for stand-alone Guix commands."
(install-locale) (install-locale)
(textdomain "guix") (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-output-port) _IOLBF)
(setvbuf (current-error-port) _IOLBF)) (setvbuf (current-error-port) _IOLBF))
@ -171,7 +176,12 @@ General help using GNU software: <http://www.gnu.org/gethelp/>"))
;; FIXME: Server-provided error messages aren't i18n'd. ;; FIXME: Server-provided error messages aren't i18n'd.
(leave (_ "build failed: ~a~%") (leave (_ "build failed: ~a~%")
(nix-protocol-error-message c)))) (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) (define (read/eval-package-expression str)
"Read and evaluate STR and return the package it refers to, or exit an "Read and evaluate STR and return the package it refers to, or exit an