diff options
author | Christopher Baines <mail@cbaines.net> | 2020-09-16 20:32:23 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2020-09-16 21:19:56 +0100 |
commit | 3530d332bd1a34f508cb25ba684622219cdc388f (patch) | |
tree | 565eb0d08b56b5fd8daa3a877e0f6de6a802d1b0 /guix-build-coordinator | |
parent | 10cfe37bd23848fb7901371b676358d711234e8c (diff) | |
download | build-coordinator-3530d332bd1a34f508cb25ba684622219cdc388f.tar build-coordinator-3530d332bd1a34f508cb25ba684622219cdc388f.tar.gz |
Don't patch fibers, just use the different procedure directly
Diffstat (limited to 'guix-build-coordinator')
-rw-r--r-- | guix-build-coordinator/agent-messaging/http.scm | 2 | ||||
-rw-r--r-- | guix-build-coordinator/client-communication.scm | 2 | ||||
-rw-r--r-- | guix-build-coordinator/utils.scm | 37 |
3 files changed, 38 insertions, 3 deletions
diff --git a/guix-build-coordinator/agent-messaging/http.scm b/guix-build-coordinator/agent-messaging/http.scm index 91b686b..e93a909 100644 --- a/guix-build-coordinator/agent-messaging/http.scm +++ b/guix-build-coordinator/agent-messaging/http.scm @@ -85,7 +85,7 @@ if there was no request body." (call-with-error-handling (lambda () - (run-server + (run-server/patched (lambda (request body) (display (format #f "~4a ~a\n" diff --git a/guix-build-coordinator/client-communication.scm b/guix-build-coordinator/client-communication.scm index d3534e3..a53ce3a 100644 --- a/guix-build-coordinator/client-communication.scm +++ b/guix-build-coordinator/client-communication.scm @@ -52,7 +52,7 @@ substitutes-channel) (call-with-error-handling (lambda () - (run-server + (run-server/patched (lambda (request body) (display (format #f "~4a ~a\n" diff --git a/guix-build-coordinator/utils.scm b/guix-build-coordinator/utils.scm index d2b5a6d..974316f 100644 --- a/guix-build-coordinator/utils.scm +++ b/guix-build-coordinator/utils.scm @@ -59,7 +59,9 @@ with-timeout - call-with-sigint)) + call-with-sigint + + run-server/patched)) (define %worker-thread-args @@ -652,3 +654,36 @@ again." (sigaction SIGINT (car handler) (cdr handler)) ;; restore original C handler. (sigaction SIGINT #f)))))) + +;; This variant of run-server from the fibers library supports running +;; multiple servers within one process. +(define run-server/patched + (let ((fibers-web-server-module + (resolve-module '(fibers web server)))) + + (define set-nonblocking! + (module-ref fibers-web-server-module 'set-nonblocking!)) + + (define make-default-socket + (module-ref fibers-web-server-module 'make-default-socket)) + + (define socket-loop + (module-ref fibers-web-server-module 'socket-loop)) + + (lambda* (handler + #:key + (host #f) + (family AF_INET) + (addr (if host + (inet-pton family host) + INADDR_LOOPBACK)) + (port 8080) + (socket (make-default-socket family addr port))) + ;; We use a large backlog by default. If the server is suddenly hit + ;; with a number of connections on a small backlog, clients won't + ;; receive confirmation for their SYN, leading them to retry -- + ;; probably successfully, but with a large latency. + (listen socket 1024) + (set-nonblocking! socket) + (sigaction SIGPIPE SIG_IGN) + (spawn-fiber (lambda () (socket-loop socket handler)))))) |