diff options
author | Christopher Baines <mail@cbaines.net> | 2020-09-16 20:09:45 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2020-09-16 21:00:08 +0100 |
commit | b624ad8b342ac9a1454765d0e0c4f99c34b57e30 (patch) | |
tree | 46d3f937523efee999187e8a06e9e16d9ff5d806 /guix-build-coordinator | |
parent | 2dc6adbbbd6cec095d8606973c81d62d5930b87a (diff) | |
download | build-coordinator-b624ad8b342ac9a1454765d0e0c4f99c34b57e30.tar build-coordinator-b624ad8b342ac9a1454765d0e0c4f99c34b57e30.tar.gz |
Extract call-with-sigint to the utils module
Diffstat (limited to 'guix-build-coordinator')
-rw-r--r-- | guix-build-coordinator/utils.scm | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/guix-build-coordinator/utils.scm b/guix-build-coordinator/utils.scm index 440b31b..d2b5a6d 100644 --- a/guix-build-coordinator/utils.scm +++ b/guix-build-coordinator/utils.scm @@ -24,6 +24,7 @@ #:use-module (gcrypt random) #:use-module (fibers) #:use-module (fibers channels) + #:use-module (fibers conditions) #:use-module (json) #:use-module (guix pki) #:use-module (guix utils) @@ -56,7 +57,9 @@ create-work-queue - with-timeout)) + with-timeout + + call-with-sigint)) (define %worker-thread-args @@ -634,3 +637,18 @@ again." (alarm 0) (sigaction SIGALRM SIG_DFL) (apply values result))))) + +;; Copied from (fibers web server) +(define (call-with-sigint thunk cvar) + (let ((handler #f)) + (dynamic-wind + (lambda () + (set! handler + (sigaction SIGINT (lambda (sig) (signal-condition! cvar))))) + thunk + (lambda () + (if handler + ;; restore Scheme handler, SIG_IGN or SIG_DFL. + (sigaction SIGINT (car handler) (cdr handler)) + ;; restore original C handler. + (sigaction SIGINT #f)))))) |