~ruther/guix-local

ce689ccf1802862cb425e30e9eea133b61ae0e03 — Ludovic Courtès 12 years ago 6a012c5
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'.
1 files changed, 12 insertions(+), 17 deletions(-)

M guix/scripts/substitute-binary.scm
M guix/scripts/substitute-binary.scm => guix/scripts/substitute-binary.scm +12 -17
@@ 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))

(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)))
;; 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 fields->alist
  ;; The narinfo format is really just like recutils.
  recutils->alist)

(define %fetch-timeout
  ;; Number of seconds after which networking is considered "slow".