diff options
author | Christopher Baines <mail@cbaines.net> | 2023-03-21 18:43:48 +0000 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2023-03-21 18:43:48 +0000 |
commit | 4c3e6fab062a6af5a80e01c7797c380a8598cf85 (patch) | |
tree | 3a0f7a53851c0c2a8988d815a81cecb22dcdbae4 /guix-build-coordinator/coordinator.scm | |
parent | 804165f14ccf613b7d76b2bda83fbfd49019f7e4 (diff) | |
download | build-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.scm | 24 |
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 |