diff options
author | 2010-12-06 11:37:47 +0100 | |
---|---|---|
committer | 2010-12-06 11:37:47 +0100 | |
commit | 15f024a12d214df681b83967894f7d7244013514 (patch) | |
tree | e3edd1a14abbf30e414ddd10ce7215278f978560 | |
parent | fc386dcb71d3691e19a08ac623e4ec4e9e97c4dc (diff) | |
download | tekuti-15f024a12d214df681b83967894f7d7244013514.tar.gz tekuti-15f024a12d214df681b83967894f7d7244013514.zip |
robustness in mod-lisp-read
* tekuti/mod-lisp.scm (mod-lisp-read): Close the port if there is an
error reading the request.
-rw-r--r-- | tekuti/mod-lisp.scm | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/tekuti/mod-lisp.scm b/tekuti/mod-lisp.scm index bb35e10..b16dab7 100644 --- a/tekuti/mod-lisp.scm +++ b/tekuti/mod-lisp.scm @@ -242,12 +242,17 @@ ;; Otherwise, try to read a request from this port. ;; Record the next index. (set-mod-lisp-poll-idx! server (1- idx)) - (let ((req (read-request/mod-lisp port))) - ;; Block buffering for reading body and writing response. - (setvbuf port _IOFBF) - (values port - req - (read-request-body/latin-1 req)))))))))))) + (with-throw-handler + #t + (lambda () + (let ((req (read-request/mod-lisp port))) + ;; Block buffering for reading body and writing response. + (setvbuf port _IOFBF) + (values port + req + (read-request-body/latin-1 req)))) + (lambda (k . args) + (false-if-exception (close-port port))))))))))))) ;; -> unspecified values (define (mod-lisp-write server client response body) |