~ruther/guix-local

89a26478160dcf90e5df6688a9df21fe993498bf — Ludovic Courtès 8 years ago 30875d0
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.
1 files changed, 7 insertions(+), 2 deletions(-)

M gnu/services/herd.scm
M gnu/services/herd.scm => gnu/services/herd.scm +7 -2
@@ 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 @@ return the socket."
(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?)