aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator/utils.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix-build-coordinator/utils.scm')
-rw-r--r--guix-build-coordinator/utils.scm20
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))))))