guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[no subject]


From: Mathieu Othacehe
Date: Wed, 29 Jul 2020 14:46:57 -0400 (EDT)

branch: master
commit 6ad9c602697ffe33c8fbb09ccd796b74bf600223
Author: Mathieu Othacehe <othacehe@gnu.org>
AuthorDate: Wed Jul 29 19:08:04 2020 +0200

    utils: Do not block the calling fiber.
    
    Setting current-fiber to #f in %non-blocking will prevent put-message in the
    new thread to try suspending itself, but will also cause the same behavior 
on
    get-message, which is not desired.
    
    * src/cuirass/utils.scm (%non-blocking): Reduce the scope of current-fiber
    parameter to the newly created thread.
---
 src/cuirass/utils.scm | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/cuirass/utils.scm b/src/cuirass/utils.scm
index 0bcbb35..e2a6fa3 100644
--- a/src/cuirass/utils.scm
+++ b/src/cuirass/utils.scm
@@ -144,23 +144,23 @@ VARS... are bound to the arguments of the worker thread."
                            (lambda (vars ...) exp ...)))
 
 (define (%non-blocking thunk)
-  (parameterize (((@@ (fibers internal) current-fiber) #f))
-    (let ((channel (make-channel)))
-      (call-with-new-thread
-       (lambda ()
+  (let ((channel (make-channel)))
+    (call-with-new-thread
+     (lambda ()
+       (parameterize (((@@ (fibers internal) current-fiber) #f))
          (catch #t
            (lambda ()
              (call-with-values thunk
                (lambda values
                  (put-message channel `(values ,@values)))))
            (lambda args
-             (put-message channel `(exception ,@args))))))
+             (put-message channel `(exception ,@args)))))))
 
-      (match (get-message channel)
-        (('values . results)
-         (apply values results))
-        (('exception . args)
-         (apply throw args))))))
+    (match (get-message channel)
+      (('values . results)
+       (apply values results))
+      (('exception . args)
+       (apply throw args)))))
 
 (define-syntax-rule (non-blocking exp ...)
   "Evalaute EXP... in a separate thread so that it doesn't block the execution



reply via email to

[Prev in Thread] Current Thread [Next in Thread]