more robustness in http-read
authorAndy Wingo <wingo@pobox.com>
Mon, 6 Dec 2010 10:24:48 +0000 (11:24 +0100)
committerAndy Wingo <wingo@pobox.com>
Mon, 6 Dec 2010 10:24:48 +0000 (11:24 +0100)
* module/web/server/http.scm (http-read): If there was an error reading
  the request, be sure to close the request port.

module/web/server/http.scm

index 1eefc0a..bddbafa 100644 (file)
               ;; Otherwise, try to read a request from this port.
               ;; Record the next index.
               (set-http-poll-idx! server (1- idx))
-              (let ((req (read-request port)))
-                ;; Block buffering for reading body and writing response.
-                (setvbuf port _IOFBF)
-                (values port
-                        req
-                        (read-request-body/bytevector req))))))))))))
+              (with-throw-handler
+               #t
+               (lambda ()
+                 (let ((req (read-request port)))
+                   ;; Block buffering for reading body and writing response.
+                   (setvbuf port _IOFBF)
+                   (values port
+                           req
+                           (read-request-body/bytevector req))))
+               (lambda (k . args)
+                 (false-if-exception (close-port port)))))))))))))
 
 (define (keep-alive? response)
   (let ((v (response-version response)))