packages/net/haproxy/patches/0019-BUG-MINOR-http-don-t-abort-client-connection-o-1.4.22.diff
heil 240ad98e89 package: haproxy
- add missing patches
 - add patch number to version



git-svn-id: svn://svn.openwrt.org/openwrt/packages@35091 3c298f89-4303-0410-b956-a3cf2f4a3e73
2013-01-10 23:47:03 +00:00

46 lines
1.7 KiB
Diff

From dc624fd282caae163b11c197b36851e0ecf373eb Mon Sep 17 00:00:00 2001
From: Willy Tarreau <w@1wt.eu>
Date: Thu, 20 Dec 2012 12:10:09 +0100
Subject: BUG/MINOR: http: don't abort client connection on premature responses
When a server responds prematurely to a POST request, haproxy used to
cause the transfer to be aborted before the end. This is problematic
because this causes the client to receive a TCP reset when it tries to
push more data, generally preventing it from receiving the response
which contain the reason for the premature reponse (eg: "entity too
large" or an authentication request).
From now on we take care of allowing the upload traffic to flow to the
server even when the response has been received, since the server is
supposed to drain it. That way the client receives the server response.
This bug has been present since 1.4 and the fix should probably be
backported there.
(cherry picked from commit 40f151aa79bcdf8b517c4e5666edbc7a47ea7fdc)
Note: 1.4 does not have SI_FL_NOHALF but this is not important.
---
src/proto_http.c | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/proto_http.c b/src/proto_http.c
index 7a8872b..e4cec6d 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -4443,9 +4443,10 @@ int http_resync_states(struct session *s)
buffer_auto_close(s->rep);
buffer_auto_read(s->rep);
}
- else if (txn->rsp.msg_state == HTTP_MSG_CLOSED ||
+ else if ((txn->req.msg_state >= HTTP_MSG_DONE &&
+ (txn->rsp.msg_state == HTTP_MSG_CLOSED || (s->rep->flags & BF_SHUTW))) ||
txn->rsp.msg_state == HTTP_MSG_ERROR ||
- (s->rep->flags & BF_SHUTW)) {
+ txn->req.msg_state == HTTP_MSG_ERROR) {
s->rep->analysers = 0;
buffer_auto_close(s->rep);
buffer_auto_read(s->rep);
--
1.7.1