services: herd: 'with-shepherd' no longer leaves an open connection.

* gnu/services/herd.scm (with-shepherd): Use 'dynamic-wind' and close
CONNECTION at the end.
This commit is contained in:
Ludovic Courtès 2018-01-21 00:19:24 +01:00
parent 30875d07ef
commit 89a2647816
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
;;;
;;; This file is part of GNU Guix.
@ -83,7 +83,12 @@ (define* (open-connection #:optional (file (%shepherd-socket-file)))
(define-syntax-rule (with-shepherd connection body ...)
"Evaluate BODY... with CONNECTION bound to an open socket to PID 1."
(let ((connection (open-connection)))
body ...))
(dynamic-wind
(const #t)
(lambda ()
body ...)
(lambda ()
(close-port connection)))))
(define-condition-type &shepherd-error &error
shepherd-error?)