mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-25 05:48:07 -05:00
services: shepherd: Remove ‘dynamic-wind’ in ‘call-with-*-file’.
Fixes <https://issues.guix.gnu.org/64653>. The ‘dynamic-wind’ was causing files to be closed prematurely when leaving the dynamic extent of PROC for instance via a delimited continuation, using Fibers (that ‘dynamic-wind’ call was also semantically incorrect in the first place). * gnu/services/shepherd.scm (shepherd-configuration-file) [config](call-with-file): Remove. (call-with-input-file, call-with-output-file): Rewrite in terms of ‘call-with-port’. Change-Id: Ica8af71a04f525a15be99985552063cb98cd6ee8
This commit is contained in:
parent
5cec983e04
commit
4e431fda5f
1 changed files with 5 additions and 16 deletions
|
@ -1,5 +1,5 @@
|
|||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2013-2016, 2018-2023 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2013-2016, 2018-2024 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
|
||||
;;; Copyright © 2018 Carlo Zancanaro <carlo@zancanaro.id.au>
|
||||
;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
|
@ -371,17 +371,6 @@ (define config
|
|||
(use-modules (srfi srfi-34)
|
||||
(system repl error-handling))
|
||||
|
||||
(define (call-with-file file flags proc)
|
||||
(let ((port #f))
|
||||
(dynamic-wind
|
||||
(lambda ()
|
||||
(set! port (open file flags)))
|
||||
(lambda ()
|
||||
(proc port))
|
||||
(lambda ()
|
||||
(close-port port)
|
||||
(set! port #f)))))
|
||||
|
||||
;; There's code run from shepherd that uses 'call-with-input-file' &
|
||||
;; co.--e.g., the 'urandom-seed' service. Starting from Shepherd
|
||||
;; 0.9.2, users need to make sure not to leak non-close-on-exec file
|
||||
|
@ -389,11 +378,11 @@ (define (call-with-file file flags proc)
|
|||
;; standard bindings with O_CLOEXEC variants.
|
||||
(set! call-with-input-file
|
||||
(lambda (file proc)
|
||||
(call-with-file file (logior O_RDONLY O_CLOEXEC)
|
||||
(call-with-port (open file (logior O_RDONLY O_CLOEXEC))
|
||||
proc)))
|
||||
(set! call-with-output-file
|
||||
(lambda (file proc)
|
||||
(call-with-file file (logior O_WRONLY O_CREAT O_CLOEXEC)
|
||||
(call-with-port (open file (logior O_WRONLY O_CREAT O_CLOEXEC))
|
||||
proc)))
|
||||
|
||||
;; Specify the default environment visible to all the services.
|
||||
|
|
Loading…
Reference in a new issue