From: Willy Tarreau Date: Sat, 2 Jan 2010 22:58:04 +0000 (+0100) Subject: [BUG] http: ensure we abort data transfer on write error X-Git-Tag: v1.4-dev5~21 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=082b01c541abb9cdb7ccc72707f59813a9bfb55f;p=thirdparty%2Fhaproxy.git [BUG] http: ensure we abort data transfer on write error When a write error is encountered during a data phase, we must absolutely abort the pending data transfer, otherwise it will never complete. --- diff --git a/src/proto_http.c b/src/proto_http.c index fd266730f2..33a45e89d8 100644 --- a/src/proto_http.c +++ b/src/proto_http.c @@ -3244,6 +3244,11 @@ int http_request_forward_body(struct session *s, struct buffer *req, int an_bit) struct http_txn *txn = &s->txn; struct http_msg *msg = &s->txn.req; + if (req->flags & (BF_SHUTW|BF_WRITE_ERROR|BF_WRITE_TIMEOUT)) { + req->analysers &= ~an_bit; + return 1; + } + if (unlikely(msg->msg_state < HTTP_MSG_BODY)) return 0; @@ -4347,6 +4352,11 @@ int http_response_forward_body(struct session *s, struct buffer *res, int an_bit struct http_txn *txn = &s->txn; struct http_msg *msg = &s->txn.rsp; + if (res->flags & (BF_SHUTW|BF_WRITE_ERROR|BF_WRITE_TIMEOUT)) { + res->analysers &= ~an_bit; + return 1; + } + if (unlikely(msg->msg_state < HTTP_MSG_BODY)) return 0;