syscalls: 'with-file-lock' removes lock file upon exit.

Fixes <https://issues.guix.gnu.org/57501>.
Reported by Ricardo Wurmus <rekado@elephly.net>.

* guix/build/syscalls.scm (call-with-file-lock)
(call-with-file-lock/no-wait): Add call to 'delete-file' in unwind
handler.
This commit is contained in:
Ludovic Courtès 2023-02-12 01:15:51 +01:00
parent 89c5cb4078
commit a68229b9a0
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 © 2014-2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014-2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2015 David Thompson <davet@gnu.org>
;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
@ -1400,7 +1400,8 @@ (define (call-with-file-lock file thunk)
thunk
(lambda ()
(when port
(unlock-file port))))))
(unlock-file port)
(delete-file file))))))
(define (call-with-file-lock/no-wait file thunk handler)
(let ((port #f))
@ -1428,7 +1429,8 @@ (define (call-with-file-lock/no-wait file thunk handler)
thunk
(lambda ()
(when port
(unlock-file port))))))
(unlock-file port)
(delete-file file))))))
(define-syntax-rule (with-file-lock file exp ...)
"Wait to acquire a lock on FILE and evaluate EXP in that context."