diff options
author | Ludovic Courtès <ludo@gnu.org> | 2019-06-03 17:13:30 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2019-06-05 23:10:36 +0200 |
commit | 5f0cf1df710cca3eeff6b41ce8e665fb911cfb41 (patch) | |
tree | 8840bf254bcac4a4ed8b1b3e08d69509e219a9ec /guix/build/syscalls.scm | |
parent | 89ceb86ad415ea92450ebda60359a7ee0ec79eb6 (diff) |
syscalls: 'with-lock-file' catches ENOSYS.
* guix/build/syscalls.scm (call-with-file-lock): Catch ENOSYS raised by
'lock-file'.
Diffstat (limited to 'guix/build/syscalls.scm')
-rw-r--r-- | guix/build/syscalls.scm | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm index 3af41f2cf5..5c2eb3c14d 100644 --- a/guix/build/syscalls.scm +++ b/guix/build/syscalls.scm @@ -1084,13 +1084,24 @@ exception if it's already taken." #t) (define (call-with-file-lock file thunk) - (let ((port (lock-file file))) + (let ((port (catch 'system-error + (lambda () + (lock-file file)) + (lambda args + ;; When using the statically-linked Guile in the initrd, + ;; 'fcntl-flock' returns ENOSYS unconditionally. Ignore + ;; that error since we're typically the only process running + ;; at this point. + (if (= ENOSYS (system-error-errno args)) + #f + (apply throw args)))))) (dynamic-wind (lambda () #t) thunk (lambda () - (unlock-file port))))) + (when port + (unlock-file port)))))) (define-syntax-rule (with-file-lock file exp ...) "Wait to acquire a lock on FILE and evaluate EXP in that context." |