From 788c33498ec649d73a73a8f65f73878a34e5d313 Mon Sep 17 00:00:00 2001 From: Reyk Floeter Date: Mon, 14 Jul 2014 20:02:43 +0200 Subject: sync --- httpd.h | 2 +- server.c | 2 +- server_http.c | 10 +++++++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/httpd.h b/httpd.h index 3834e80..bd24c43 100644 --- a/httpd.h +++ b/httpd.h @@ -398,7 +398,7 @@ int server_writeheader_http(struct client *); int server_writeresponse_http(struct client *); int server_response_http(struct client *, u_int, struct media_type *, size_t); -void server_reset_http(struct client *); +void server_reset_http(struct client *, int); void server_close_http(struct client *); int server_response(struct httpd *, struct client *); diff --git a/server.c b/server.c index b72d556..977b864 100644 --- a/server.c +++ b/server.c @@ -412,7 +412,7 @@ server_error(struct bufferevent *bev, short error, void *arg) return; if (clt->clt_persist) { - server_reset_http(clt); + server_reset_http(clt, 1); bufferevent_enable(clt->clt_bev, EV_READ|EV_WRITE); return; } else diff --git a/server_http.c b/server_http.c index ad2add8..061e8a4 100644 --- a/server_http.c +++ b/server_http.c @@ -321,7 +321,6 @@ server_read_http(struct bufferevent *bev, void *arg) if (clt->clt_toread <= 0) { if (server_response(env, clt) == -1) return; - clt->clt_done = 0; } } if (clt->clt_done) { @@ -502,18 +501,23 @@ server_read_httpchunks(struct bufferevent *bev, void *arg) } void -server_reset_http(struct client *clt) +server_reset_http(struct client *clt, int all) { struct http_descriptor *desc = clt->clt_desc; - server_httpdesc_free(desc); desc->http_method = 0; desc->http_chunked = 0; + desc->http_lastheader = NULL; clt->clt_headerlen = 0; clt->clt_line = 0; clt->clt_done = 0; clt->clt_toread = TOREAD_HTTP_HEADER; clt->clt_bev->readcb = server_read_http; + + if (!all) + return; + + server_httpdesc_free(desc); if (clt->clt_fd != -1) { close(clt->clt_fd); clt->clt_fd = -1; -- cgit v1.2.3-54-g00ecf