summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2013-07-11 22:42:41 +0200
committerLudovic Courtès <ludo@gnu.org>2013-07-11 22:42:41 +0200
commitce689ccf1802862cb425e30e9eea133b61ae0e03 (patch)
tree2476a9cd7c280f7f6c2b97f9758e14e338817735
parent6a012c5f510a324ffe34ebf585f47fcd40ea63a3 (diff)
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'.
-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".