From a13dcf2c36c22241262c6713eaafc3058defe467 Mon Sep 17 00:00:00 2001 From: Jay McCarthy Date: Wed, 27 Aug 2008 15:21:01 +0000 Subject: [PATCH] Limiting the size of s/s/d continuations svn: r11455 --- collects/web-server/servlet/web.ss | 25 +++++++++++-------- .../web-server/template/examples/basic.html | 2 +- collects/web-server/template/examples/run.ss | 9 ++++++- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/collects/web-server/servlet/web.ss b/collects/web-server/servlet/web.ss index 877ead965b..d465f0d1a9 100644 --- a/collects/web-server/servlet/web.ss +++ b/collects/web-server/servlet/web.ss @@ -2,8 +2,7 @@ (require net/url mzlib/list mzlib/plt-match - scheme/contract - mzlib/etc) + scheme/contract) (require "../managers/manager.ss" "../private/util.ss" "../private/servlet.ss" @@ -113,8 +112,8 @@ ;; send/suspend: (url -> response) [(request -> response)] -> request ;; send a response and apply the continuation to the next request -(define send/suspend - (opt-lambda (response-generator [expiration-handler (current-servlet-continuation-expiration-handler)]) +(define (send/suspend response-generator + [expiration-handler (current-servlet-continuation-expiration-handler)]) (with-frame-after (call-with-composable-continuation (lambda (k) @@ -129,14 +128,14 @@ (list* instance-id k-embedding) (request-uri (execution-context-request ctxt))))) (send/back (response-generator k-url))) - servlet-prompt)))) + servlet-prompt))) ;; send/forward: (url -> response) [(request -> response)] -> request ;; clear the continuation table, then behave like send/suspend -(define send/forward - (opt-lambda (response-generator [expiration-handler (current-servlet-continuation-expiration-handler)]) +(define (send/forward response-generator + [expiration-handler (current-servlet-continuation-expiration-handler)]) (clear-continuation-table!) - (send/suspend response-generator expiration-handler))) + (send/suspend response-generator expiration-handler)) ;; send/suspend/dispatch : ((proc -> url) -> response) [(request -> response)] -> request ;; send/back a response generated from a procedure that may convert @@ -150,10 +149,14 @@ (lambda (k0) (send/back (response-generator - (opt-lambda (proc [expiration-handler (current-servlet-continuation-expiration-handler)]) + (lambda (proc [expiration-handler (current-servlet-continuation-expiration-handler)]) (let/ec k1 - (let ([new-request (send/suspend k1 expiration-handler)]) - (k0 (lambda () (proc new-request))))))))) + ; This makes the second continuation captured by send/suspend smaller + (call-with-continuation-prompt + (lambda () + (let ([new-request (send/suspend k1 expiration-handler)]) + (k0 (lambda () (proc new-request))))) + servlet-prompt)))))) servlet-prompt)]) (thunk))) diff --git a/collects/web-server/template/examples/basic.html b/collects/web-server/template/examples/basic.html index cfec2f8d23..e90c8dd09d 100644 --- a/collects/web-server/template/examples/basic.html +++ b/collects/web-server/template/examples/basic.html @@ -2,7 +2,7 @@ @title - @for/list[([c @clients])]{ + @in[c @clients]{ @t{ diff --git a/collects/web-server/template/examples/run.ss b/collects/web-server/template/examples/run.ss index 74cc05644a..6cd72d5cad 100644 --- a/collects/web-server/template/examples/run.ss +++ b/collects/web-server/template/examples/run.ss @@ -42,14 +42,21 @@ e ...) (get-output-string os))])) +; XXX Want to have this instead of every begin, but perhaps should make a list rather than use show directly (define-syntax begin/show (syntax-rules () [(_ e) e] [(_ e ...) ; XXX If scribble/text shared "show", then I would use it here - (begin (display e) ...)])) + (begin (text:show e) ...)])) (define t list) +(define-syntax in + (syntax-rules () + [(_ x xs e ...) + (for/list ([x xs]) + e ...)])) + ; Examples (include-template "static.html")
@(client-surname c), @(client-firstname c)