summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2010-12-12 21:59:29 +0100
committerAndy Wingo <wingo@pobox.com>2010-12-12 21:59:29 +0100
commitec3c7570d86bedfa52e4c3c0628dfe11b63f8d51 (patch)
tree5ef5861f0b5c172aa450b15f31d604cd8a268fff
parentc7857da63ada7449ab18834b8f2f17e07bd6d728 (diff)
downloadguile-ec3c7570d86bedfa52e4c3c0628dfe11b63f8d51.tar.gz
http-read robustness
* module/web/server/http.scm (http-read): Record the client index in more cases in which code could throw an error.
-rw-r--r--module/web/server/http.scm6
1 files changed, 4 insertions, 2 deletions
diff --git a/module/web/server/http.scm b/module/web/server/http.scm
index 0cbf43b59..e9d612b1b 100644
--- a/module/web/server/http.scm
+++ b/module/web/server/http.scm
@@ -84,6 +84,7 @@
(lp (1- (poll-set-nfds poll-set))))
((not (zero? (logand revents *error-events*)))
;; An error.
+ (set-http-poll-idx! server idx)
(throw 'interrupt))
(else
;; A new client. Add to set, poll, and loop.
@@ -104,6 +105,9 @@
;; it. Remove it from the poll set.
(else
(let ((port (poll-set-remove! poll-set idx)))
+ ;; Record the next index in all cases, in case the EOF check
+ ;; throws an error.
+ (set-http-poll-idx! server (1- idx))
(cond
((eof-object? (peek-char port))
;; EOF.
@@ -111,8 +115,6 @@
(lp (1- idx)))
(else
;; Otherwise, try to read a request from this port.
- ;; Record the next index.
- (set-http-poll-idx! server (1- idx))
(with-throw-handler
#t
(lambda ()