(define-module (knots) #:use-module (ice-9 suspendable-ports) #:use-module (fibers conditions) #:export (call-with-default-io-waiters wait-when-system-clock-behind call-with-sigint)) (define (call-with-default-io-waiters thunk) (parameterize ((current-read-waiter (@@ (ice-9 suspendable-ports) default-read-waiter)) (current-write-waiter (@@ (ice-9 suspendable-ports) default-write-waiter))) (thunk))) (define (wait-when-system-clock-behind) (let ((start-of-the-year-2000 946684800)) (while (< (current-time) start-of-the-year-2000) (simple-format (current-error-port) "warning: system clock potentially behind, waiting\n") (sleep 20)))) ;; 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))))))