ui: 'with-profile-lock' keeps going upon ENOLCK.

* guix/build/syscalls.scm (call-with-file-lock/no-wait): Really pass
ARGS to HANDLER.  Return #f when HANDLER is called.
* guix/ui.scm (profile-lock-handler): Emit a mere warning upon ENOLCK.
This commit is contained in:
Ludovic Courtès 2019-11-29 15:11:51 +01:00
parent 55e1dfa4dd
commit 3f8e890d91
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
2 changed files with 10 additions and 3 deletions

View file

@ -1127,7 +1127,9 @@ (define (call-with-file-lock/no-wait file thunk handler)
(lambda (key . args)
(match key
('flock-error
(handler args))
(apply handler args)
;; No open port to the lock, so return #f.
#f)
('system-error
;; When using the statically-linked Guile in the initrd,
;; 'fcntl-flock' returns ENOSYS unconditionally. Ignore

View file

@ -1666,8 +1666,13 @@ (define (display-diff profile old new)
(define (profile-lock-handler profile errno . _)
"Handle failure to acquire PROFILE's lock."
(leave (G_ "profile ~a is locked by another process~%")
profile))
;; NFS mounts can return ENOLCK. When that happens, there's not much that
;; can be done, so warn the user and keep going.
(if (= errno ENOLCK)
(warning (G_ "cannot lock profile ~a: ~a~%")
profile (strerror errno))
(leave (G_ "profile ~a is locked by another process~%")
profile)))
(define profile-lock-file
(cut string-append <> ".lock"))