BUG/MEDIUM: proto-htx: Set SI_FL_NOHALF on server side when request is done
In the function htx_end_request, the flag SI_FL_NOHALF must be set on the server
side once the request is in the state HTTP_MSG_DONE. But the response state was
checked before and the flag was only set when the response was also in the state
HTTP_MSG_DONE. Of course, it is not desirable.
This patch must be backported to 1.9.
diff --git a/src/proto_htx.c b/src/proto_htx.c
index 2a02193..9a22a5e 100644
--- a/src/proto_htx.c
+++ b/src/proto_htx.c
@@ -5068,13 +5068,6 @@
return;
if (txn->req.msg_state == HTTP_MSG_DONE) {
- if (txn->rsp.msg_state < HTTP_MSG_DONE) {
- /* The server has not finished to respond, so we
- * don't want to move in order not to upset it.
- */
- return;
- }
-
/* No need to read anymore, the request was completely parsed.
* We can shut the read side unless we want to abort_on_close,
* or we have a POST request. The issue with POST requests is
@@ -5099,6 +5092,13 @@
*/
chn->flags |= CF_NEVER_WAIT;
+ if (txn->rsp.msg_state < HTTP_MSG_DONE) {
+ /* The server has not finished to respond, so we
+ * don't want to move in order not to upset it.
+ */
+ return;
+ }
+
/* When we get here, it means that both the request and the
* response have finished receiving. Depending on the connection
* mode, we'll have to wait for the last bytes to leave in either