Skip to content
Snippets Groups Projects
Unverified Commit 6ad9c602 authored by Mathieu Othacehe's avatar Mathieu Othacehe
Browse files

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.
parent e4132735
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment