summary refs log tree commit diff
diff options
context:
space:
mode:
authorMathieu Othacehe <othacehe@gnu.org>2020-12-07 14:12:06 +0100
committerMathieu Othacehe <othacehe@gnu.org>2020-12-13 13:24:17 +0100
commit1f49ab6ee22abf31654e865deb89c52026c99b29 (patch)
treea94c1c219e8e258a4c16c9ebee4ab1f14985520e
parent90db72d2253459c5c62d31b2ac2d56a6a6d11c93 (diff)
downloadguix-1f49ab6ee22abf31654e865deb89c52026c99b29.tar.gz
scripts: discover: Remove file locks.
* guix/scripts/discover.scm (call-with-read-file-lock, with-read-file-lock):
Remove them.
(write-publish-file): Use "with-atomic-file-output" instead of
"with-file-lock".
(read-substitute-urls): Remove file lock.
-rw-r--r--guix/scripts/discover.scm57
1 files changed, 17 insertions, 40 deletions
diff --git a/guix/scripts/discover.scm b/guix/scripts/discover.scm
index 007db0d49d..2b5b564bbe 100644
--- a/guix/scripts/discover.scm
+++ b/guix/scripts/discover.scm
@@ -21,6 +21,7 @@
   #:use-module (guix config)
   #:use-module (guix scripts)
   #:use-module (guix ui)
+  #:use-module (guix utils)
   #:use-module (guix build syscalls)
   #:use-module (guix build utils)
   #:use-module (guix scripts publish)
@@ -78,47 +79,27 @@ CACHE-DIRECTORY."
 (define* (write-publish-file #:key (file (%publish-file)))
   "Dump the content of %PUBLISH-SERVICES hash table into FILE.  Use a write
 lock on FILE to synchronize with any potential readers."
-  (with-file-lock file
-    (call-with-output-file file
-      (lambda (port)
-        (hash-for-each
-         (lambda (name service)
-           (format port "http://~a:~a~%"
-                   (avahi-service-address service)
-                   (avahi-service-port service)))
-         %publish-services)))
-        (chmod file #o644)))
-
-(define (call-with-read-file-lock file thunk)
-  "Call THUNK with a read lock on FILE."
-  (let ((port #f))
-    (dynamic-wind
-      (lambda ()
-        (set! port
-              (let ((port (open-file file "r0")))
-                (fcntl-flock port 'read-lock)
-                port)))
-      thunk
-      (lambda ()
-        (when port
-          (unlock-file port))))))
-
-(define-syntax-rule (with-read-file-lock file exp ...)
-  "Wait to acquire a read lock on FILE and evaluate EXP in that context."
-  (call-with-read-file-lock file (lambda () exp ...)))
+  (with-atomic-file-output file
+    (lambda (port)
+      (hash-for-each
+       (lambda (name service)
+         (format port "http://~a:~a~%"
+                 (avahi-service-address service)
+                 (avahi-service-port service)))
+       %publish-services)))
+  (chmod file #o644))
 
 (define* (read-substitute-urls #:key (file (%publish-file)))
   "Read substitute urls list from FILE and return it.  Use a read lock on FILE
 to synchronize with the writer."
   (if (file-exists? file)
-      (with-read-file-lock file
-        (call-with-input-file file
-          (lambda (port)
-            (let loop ((url (read-line port))
-                       (urls '()))
-              (if (eof-object? url)
-                  urls
-                  (loop (read-line port) (cons url urls)))))))
+      (call-with-input-file file
+        (lambda (port)
+          (let loop ((url (read-line port))
+                     (urls '()))
+            (if (eof-object? url)
+                urls
+                (loop (read-line port) (cons url urls))))))
       '()))
 
 
@@ -158,7 +139,3 @@ to synchronize with the writer."
         (mkdir-p (dirname publish-file))
         (avahi-browse-service-thread service-proc
                                      #:types %services)))))
-
-;;; Local Variables:
-;;; eval: (put 'with-read-file-lock 'scheme-indent-function 1)
-;;; End: