aboutsummaryrefslogtreecommitdiff
path: root/nar-herder/utils.scm
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2022-02-09 17:43:07 +0000
committerChristopher Baines <mail@cbaines.net>2022-02-09 17:43:07 +0000
commitb0263314f56cc6558e4941f64c89d9fd85aaa260 (patch)
treeca1deb8214b0ed019ac68fd82a6d8a603679a8b1 /nar-herder/utils.scm
parent6457dd4d9ed35762685b18be74712101a1be5287 (diff)
downloadnar-herder-b0263314f56cc6558e4941f64c89d9fd85aaa260.tar
nar-herder-b0263314f56cc6558e4941f64c89d9fd85aaa260.tar.gz
Switch to guile-fibers@1.1
I think the main change required is just to stop accessing the now missing current-fiber parameter.
Diffstat (limited to 'nar-herder/utils.scm')
-rw-r--r--nar-herder/utils.scm115
1 files changed, 57 insertions, 58 deletions
diff --git a/nar-herder/utils.scm b/nar-herder/utils.scm
index cc5e76d..2d62360 100644
--- a/nar-herder/utils.scm
+++ b/nar-herder/utils.scm
@@ -576,64 +576,63 @@ falling back to en_US.utf8\n"
(log-exception? (const #t)))
"Return a channel used to offload work to a dedicated thread. ARGS are the
arguments of the worker thread procedure."
- (parameterize (((@@ (fibers internal) current-fiber) #f))
- (let ((channel (make-channel)))
- (for-each
- (lambda _
- (call-with-new-thread
- (lambda ()
- (let init ((args (initializer)))
- (parameterize ((%worker-thread-args args))
- (let loop ((current-lifetime lifetime))
- (match (get-message channel)
- (((? channel? reply) sent-time (? procedure? proc))
- (let ((time-delay
- (- (get-internal-real-time)
- sent-time)))
- (delay-logger (/ time-delay
- internal-time-units-per-second))
- (put-message
- reply
- (let ((start-time (get-internal-real-time)))
- (with-exception-handler
- (lambda (exn)
- (list 'worker-thread-error
- (/ (- (get-internal-real-time)
- start-time)
- internal-time-units-per-second)
- exn))
- (lambda ()
- (with-throw-handler #t
- (lambda ()
- (call-with-values
- (lambda ()
- (apply proc args))
- (lambda vals
- (cons (/ (- (get-internal-real-time)
- start-time)
- internal-time-units-per-second)
- vals))))
- (lambda args
- (when (match args
- (('%exception exn)
- (log-exception? exn))
- (_ #t))
- (simple-format
- (current-error-port)
- "worker-thread: exception: ~A\n" args)
- (backtrace)))))
- #:unwind? #t))))))
- (if (number? current-lifetime)
- (unless (< current-lifetime 0)
- (loop (if current-lifetime
- (- current-lifetime 1)
- #f)))
- (loop #f))))
- (when destructor
- (apply destructor args))
- (init (initializer))))))
- (iota parallelism))
- channel)))
+ (let ((channel (make-channel)))
+ (for-each
+ (lambda _
+ (call-with-new-thread
+ (lambda ()
+ (let init ((args (initializer)))
+ (parameterize ((%worker-thread-args args))
+ (let loop ((current-lifetime lifetime))
+ (match (get-message channel)
+ (((? channel? reply) sent-time (? procedure? proc))
+ (let ((time-delay
+ (- (get-internal-real-time)
+ sent-time)))
+ (delay-logger (/ time-delay
+ internal-time-units-per-second))
+ (put-message
+ reply
+ (let ((start-time (get-internal-real-time)))
+ (with-exception-handler
+ (lambda (exn)
+ (list 'worker-thread-error
+ (/ (- (get-internal-real-time)
+ start-time)
+ internal-time-units-per-second)
+ exn))
+ (lambda ()
+ (with-throw-handler #t
+ (lambda ()
+ (call-with-values
+ (lambda ()
+ (apply proc args))
+ (lambda vals
+ (cons (/ (- (get-internal-real-time)
+ start-time)
+ internal-time-units-per-second)
+ vals))))
+ (lambda args
+ (when (match args
+ (('%exception exn)
+ (log-exception? exn))
+ (_ #t))
+ (simple-format
+ (current-error-port)
+ "worker-thread: exception: ~A\n" args)
+ (backtrace)))))
+ #:unwind? #t))))))
+ (if (number? current-lifetime)
+ (unless (< current-lifetime 0)
+ (loop (if current-lifetime
+ (- current-lifetime 1)
+ #f)))
+ (loop #f))))
+ (when destructor
+ (apply destructor args))
+ (init (initializer))))))
+ (iota parallelism))
+ channel))
(define* (call-with-worker-thread channel proc #:key duration-logger)
"Send PROC to the worker thread through CHANNEL. Return the result of PROC.