mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-11-07 15:36:20 -05:00
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.
This commit is contained in:
parent
90db72d225
commit
1f49ab6ee2
1 changed files with 17 additions and 40 deletions
|
@ -21,6 +21,7 @@ (define-module (guix scripts discover)
|
|||
#: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 @@ (define %publish-file
|
|||
(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 @@ (define-command (guix-discover . args)
|
|||
(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:
|
||||
|
|
Loading…
Reference in a new issue