diff options
author | Andy Wingo <wingo@pobox.com> | 2010-12-12 21:59:29 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2010-12-12 21:59:29 +0100 |
commit | ec3c7570d86bedfa52e4c3c0628dfe11b63f8d51 (patch) | |
tree | 5ef5861f0b5c172aa450b15f31d604cd8a268fff | |
parent | c7857da63ada7449ab18834b8f2f17e07bd6d728 (diff) | |
download | guile-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.scm | 6 |
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 () |