aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator/coordinator.scm
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2023-03-21 18:43:48 +0000
committerChristopher Baines <mail@cbaines.net>2023-03-21 18:43:48 +0000
commit4c3e6fab062a6af5a80e01c7797c380a8598cf85 (patch)
tree3a0f7a53851c0c2a8988d815a81cecb22dcdbae4 /guix-build-coordinator/coordinator.scm
parent804165f14ccf613b7d76b2bda83fbfd49019f7e4 (diff)
downloadbuild-coordinator-4c3e6fab062a6af5a80e01c7797c380a8598cf85.tar
build-coordinator-4c3e6fab062a6af5a80e01c7797c380a8598cf85.tar.gz
Fix issue sending events outside of run-fibers
The thread for hooks doesn't run in the context of fibers, so there's problems calling coordinator actions like submit-build which call spawn-fiber for sending the event. To address this, capture the scheduler when the coordinator service starts and use that scheduler for spawning the fibers.
Diffstat (limited to 'guix-build-coordinator/coordinator.scm')
-rw-r--r--guix-build-coordinator/coordinator.scm24
1 files changed, 17 insertions, 7 deletions
diff --git a/guix-build-coordinator/coordinator.scm b/guix-build-coordinator/coordinator.scm
index 189f148..acad57e 100644
--- a/guix-build-coordinator/coordinator.scm
+++ b/guix-build-coordinator/coordinator.scm
@@ -40,6 +40,7 @@
#:use-module (gcrypt random)
#:use-module (fibers)
#:use-module (fibers channels)
+ #:use-module (fibers scheduler)
#:use-module (fibers conditions)
#:use-module (prometheus)
#:use-module (guix derivations)
@@ -112,7 +113,9 @@
(events-channel build-coordinator-events-channel
set-build-coordinator-events-channel!)
(get-state-id build-coordinator-get-state-id-proc
- set-build-coordinator-get-state-id-proc!))
+ set-build-coordinator-get-state-id-proc!)
+ (scheduler build-coordinator-scheduler
+ set-build-coordinator-scheduler!))
(define %known-hooks
'(build-submitted
@@ -257,12 +260,16 @@
get-state-id)))
(define (build-coordinator-send-event build-coordinator . args)
- (spawn-fiber
- (lambda ()
- (put-message
- (build-coordinator-events-channel build-coordinator)
- args))
- #:parallel? #t))
+ (and=>
+ (build-coordinator-scheduler build-coordinator)
+ (lambda (scheduler)
+ (spawn-fiber
+ (lambda ()
+ (put-message
+ (build-coordinator-events-channel build-coordinator)
+ args))
+ scheduler
+ #:parallel? #t))))
(define* (build-coordinator-listen-for-events build-coordinator callback
#:key after-state-id)
@@ -433,6 +440,9 @@
(spawn-fiber-to-watch-for-deferred-builds build-coordinator)
+ (set-build-coordinator-scheduler! build-coordinator
+ (current-scheduler))
+
(let ((events-channel
get-state-id
(make-events-channel