substitute-binary: Directly replace the global `regexp-exec'.

* guix/scripts/substitute-binary.scm (%regexp-exec-mutex, string->uri):
  Remove.
  (regexp-exec): Replace this global binding by a thread-safety wrapper.
  (fields->alist): Remove `with-mutex', and directly alias `recutils->alist'.
This commit is contained in:
Ludovic Courtès 2013-07-11 22:42:41 +02:00
parent 6a012c5f51
commit ce689ccf18
1 changed files with 11 additions and 16 deletions

View File

@ -87,23 +87,18 @@ output port, and PROC's result is returned."
(lambda (key . args)
(false-if-exception (delete-file template))))))
(define %regexp-exec-mutex
;; In Guile 2.0.9, `regexp-exec' is thread-unsafe, so work around it.
;; See <http://bugs.gnu.org/14404>.
(make-mutex))
;; In Guile 2.0.9, `regexp-exec' is thread-unsafe, so work around it.
;; See <http://bugs.gnu.org/14404>.
(set! regexp-exec
(let ((real regexp-exec)
(lock (make-mutex)))
(lambda args
(with-mutex lock
(apply real args)))))
(define string->uri
(let ((real (@ (web uri) string->uri)))
(lambda (uri)
"A thread-safe `string->uri'."
(with-mutex %regexp-exec-mutex
(real uri)))))
(define (fields->alist port)
"Read recutils-style record from PORT and return them as a list of key/value
pairs."
(with-mutex %regexp-exec-mutex
(recutils->alist port)))
(define fields->alist
;; The narinfo format is really just like recutils.
recutils->alist)
(define %fetch-timeout
;; Number of seconds after which networking is considered "slow".