summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--guix/build/syscalls.scm4
-rw-r--r--guix/ui.scm9
2 files changed, 10 insertions, 3 deletions
diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm
index a5a9c92a42..ce7999b433 100644
--- a/guix/build/syscalls.scm
+++ b/guix/build/syscalls.scm
@@ -1127,7 +1127,9 @@ exception if it's already taken."
(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
diff --git a/guix/ui.scm b/guix/ui.scm
index f4aa6e291e..540671f3dd 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -1666,8 +1666,13 @@ DURATION-RELATION with the current time."
(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"))