diff options
| author | Andy Wingo <wingo@pobox.com> | 2016-09-07 11:33:48 +0200 |
|---|---|---|
| committer | Andy Wingo <wingo@pobox.com> | 2016-09-07 11:33:48 +0200 |
| commit | 7d969aeabe46201af639c80eb54c5e4bd97ee13a (patch) | |
| tree | 17646c341b23b5230ebe4a990b5b621dd80e0d59 /web | |
| parent | Add channels implementation (diff) | |
| download | guile-fibers-7d969aeabe46201af639c80eb54c5e4bd97ee13a.tar.gz | |
Separate public and private fibers interfaces
* fibers/internal.scm: New file, factored out of (fibers).
* fibers.scm: Refactor to be just the public interface.
* fibers/channels.scm:
* web/server/fibers.scm:
* examples/memcached-client.scm:
* examples/memcached-server.scm:
* examples/ping-client.scm:
* examples/ping-server.scm: Adapt to interface changes.
* Makefile.am (SOURCES): Add (fibers internal).
Diffstat (limited to 'web')
| -rw-r--r-- | web/server/fibers.scm | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/web/server/fibers.scm b/web/server/fibers.scm index 9410581..f8d6ae2 100644 --- a/web/server/fibers.scm +++ b/web/server/fibers.scm @@ -34,7 +34,12 @@ #:use-module (ice-9 binary-ports) #:use-module (ice-9 suspendable-ports) #:use-module (ice-9 match) - #:use-module (fibers)) + #:use-module (fibers) + #:use-module ((fibers internal) + #:select (make-scheduler + destroy-scheduler + suspend-current-fiber + resume-fiber))) (define (set-nonblocking! port) (fcntl port F_SETFL (logior O_NONBLOCK (fcntl port F_GETFL))) @@ -71,9 +76,9 @@ (listen socket 1024) (set-nonblocking! socket) (sigaction SIGPIPE SIG_IGN) - (let* ((ctx (make-scheduler)) - (server (make-server ctx (make-prompt-tag "have-request")))) - (spawn (lambda () (socket-loop server socket)) ctx) + (let* ((sched (make-scheduler)) + (server (make-server sched (make-prompt-tag "have-request")))) + (spawn-fiber (lambda () (socket-loop server socket)) sched) server)) (define (bad-request msg . args) @@ -104,8 +109,8 @@ (lambda () (let* ((request (read-request client)) (body (read-request-body request))) - (suspend - (lambda (ctx fiber) + (suspend-current-fiber + (lambda (fiber) (have-request fiber request body))))) (lambda (key . args) (display "While reading request:\n" (current-error-port)) @@ -144,7 +149,7 @@ ;; TCP_NODELAY is not defined on this platform. (false-if-exception (setsockopt client IPPROTO_TCP TCP_NODELAY 0)) - (spawn (lambda () (client-loop client have-request))) + (spawn-fiber (lambda () (client-loop client have-request))) (loop))))) ;; -> (client request body | #f #f #f) @@ -152,13 +157,15 @@ (call-with-prompt (server-have-request-prompt server) (lambda () - (run (server-scheduler server))) + (run-fibers #:scheduler (server-scheduler server) + #:install-suspendable-ports? #f + #:keep-scheduler? #t)) (lambda (k client request body) (values client request body)))) ;; -> 0 values (define (server-write server client response body) - (resume client (lambda () (values response body)) (server-scheduler server)) + (resume-fiber client (lambda () (values response body))) (values)) ;; -> unspecified values |
