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:
parent
e3ccdf9e96
commit
e14c39291b
12
guix/ui.scm
12
guix/ui.scm
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue