substitute-binary: Directly replace the global `regexp-exec'.
authorLudovic Courtès <ludo@gnu.org>
Thu, 11 Jul 2013 20:42:41 +0000 (22:42 +0200)
committerLudovic Courtès <ludo@gnu.org>
Thu, 11 Jul 2013 20:42:41 +0000 (22:42 +0200)
* 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'.

guix/scripts/substitute-binary.scm

index e624424..fbb5cf8 100755 (executable)
@@ -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".