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.scm23
1 files changed, 21 insertions, 2 deletions
diff --git a/guix-build-coordinator/utils.scm b/guix-build-coordinator/utils.scm
index 9a83358..9877224 100644
--- a/guix-build-coordinator/utils.scm
+++ b/guix-build-coordinator/utils.scm
@@ -305,10 +305,29 @@ upcoming chunk."
gc-enable)
(thunk)))
+(define &port-timeout
+ (make-exception-type '&port-timeout
+ &external-error
+ '()))
+
+(define make-port-timeout-error
+ (record-constructor &port-timeout))
+
+(define port-timeout-error?
+ (record-predicate &port-timeout))
+
(define* (with-port-timeouts thunk #:key (timeout (* 120 1000)))
(parameterize
- ((current-read-waiter (lambda (port) (port-poll port "r" timeout)))
- (current-write-waiter (lambda (port) (port-poll port "w" timeout))))
+ ((current-read-waiter
+ (lambda (port)
+ (when (eq? (port-poll port "r" timeout) 0)
+ (raise-exception
+ (make-port-timeout-error)))))
+ (current-write-waiter
+ (lambda (port)
+ (when (eq? (port-poll port "w" timeout) 0)
+ (raise-exception
+ (make-port-timeout-error))))))
(thunk)))
(define* (make-chunked-output-port* port #:key (keep-alive? #f)