aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xguix/scripts/substitute-binary.scm29
1 files changed, 12 insertions, 17 deletions
diff --git a/guix/scripts/substitute-binary.scm b/guix/scripts/substitute-binary.scm
index e6244245d3..fbb5cf8337 100755
--- a/guix/scripts/substitute-binary.scm
+++ b/guix/scripts/substitute-binary.scm
@@ -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".