fix a bug where event_set was called on a pending event;

don't read body for return codes that do not require a body;
from dug song.


svn:r294
This commit is contained in:
Niels Provos 2006-12-06 04:12:11 +00:00
parent c6e285d31a
commit 785923704c
2 changed files with 16 additions and 3 deletions

View File

@ -50,8 +50,10 @@ extern "C" {
/* Response codes */ /* Response codes */
#define HTTP_OK 200 #define HTTP_OK 200
#define HTTP_NOCONTENT 204
#define HTTP_MOVEPERM 301 #define HTTP_MOVEPERM 301
#define HTTP_MOVETEMP 302 #define HTTP_MOVETEMP 302
#define HTTP_NOTMODIFIED 304
#define HTTP_BADREQUEST 400 #define HTTP_BADREQUEST 400
#define HTTP_NOTFOUND 404 #define HTTP_NOTFOUND 404
#define HTTP_SERVUNAVAIL 503 #define HTTP_SERVUNAVAIL 503

17
http.c
View File

@ -247,7 +247,10 @@ evhttp_write_buffer(struct evhttp_connection *evcon,
evcon->cb = cb; evcon->cb = cb;
evcon->cb_arg = arg; evcon->cb_arg = arg;
/* xxx: maybe check if the event is still pending? */ /* check if the event is already pending */
if (event_pending(&evcon->ev, EV_WRITE|EV_TIMEOUT, NULL))
event_del(&evcon->ev);
event_set(&evcon->ev, evcon->fd, EV_WRITE, evhttp_write, evcon); event_set(&evcon->ev, evcon->fd, EV_WRITE, evhttp_write, evcon);
evhttp_add_event(&evcon->ev, evcon->timeout, HTTP_WRITE_TIMEOUT); evhttp_add_event(&evcon->ev, evcon->timeout, HTTP_WRITE_TIMEOUT);
} }
@ -1138,9 +1141,17 @@ evhttp_read_header(int fd, short what, void *arg)
break; break;
case EVHTTP_RESPONSE: case EVHTTP_RESPONSE:
event_debug(("%s: starting to read body for \"%s\" on %d\n", if (req->response_code == HTTP_NOCONTENT ||
req->response_code == HTTP_NOTMODIFIED ||
(req->response_code >= 100 && req->response_code < 200)) {
event_debug(("%s: skipping body for code %d\n",
__func__, req->response_code));
evhttp_connection_done(evcon);
} else {
event_debug(("%s: start of read body for %s on %d\n",
__func__, req->remote_host, fd)); __func__, req->remote_host, fd));
evhttp_get_body(evcon, req); evhttp_get_body(evcon, req);
}
break; break;
default: default: