|
commit 72c692701ab4197f1f8ec7594b7e8ef5082b9d9e
|
|
Author: Christopher Faulet <cfaulet@haproxy.com>
|
|
Date: Fri Jul 26 16:40:24 2019 +0200
|
|
|
|
BUG/MINOR: hlua/htx: Reset channels analyzers when txn:done() is called
|
|
|
|
For HTX streams, when txn:done() is called, the work is delegated to the
|
|
function http_reply_and_close(). But it is not enough. The channel's analyzers
|
|
must also be reset. Otherwise, some analyzers may still be called while
|
|
processing should be aborted.
|
|
|
|
For instance, if the function is called from an http-request rules on the
|
|
frontend, request analyzers on the backend side are still called. So we may try
|
|
to add an header to the request, while this one was already reset.
|
|
|
|
This patch must be backported to 2.0 and 1.9.
|
|
|
|
(cherry picked from commit fe6a71b8e08234dbe03fbd2fa3017590681479df)
|
|
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
|
|
|
|
diff --git a/src/hlua.c b/src/hlua.c
|
|
index 23d2aa04..f9d1d699 100644
|
|
--- a/src/hlua.c
|
|
+++ b/src/hlua.c
|
|
@@ -5996,8 +5996,12 @@ __LJMP static int hlua_txn_done(lua_State *L)
|
|
ic = &htxn->s->req;
|
|
oc = &htxn->s->res;
|
|
|
|
- if (IS_HTX_STRM(htxn->s))
|
|
- htx_reply_and_close(htxn->s, 0, NULL);
|
|
+ if (IS_HTX_STRM(htxn->s)) {
|
|
+ htxn->s->txn->status = 0;
|
|
+ http_reply_and_close(htxn->s, 0, NULL);
|
|
+ ic->analysers &= AN_REQ_FLT_END;
|
|
+ oc->analysers &= AN_RES_FLT_END;
|
|
+ }
|
|
else {
|
|
if (htxn->s->txn) {
|
|
/* HTTP mode, let's stay in sync with the stream */
|
|
@@ -6031,6 +6035,9 @@ __LJMP static int hlua_txn_done(lua_State *L)
|
|
ic->analysers = 0;
|
|
}
|
|
|
|
+ if (!(htxn->s->flags & SF_ERR_MASK)) // this is not really an error but it is
|
|
+ htxn->s->flags |= SF_ERR_LOCAL; // to mark that it comes from the proxy
|
|
+
|
|
hlua->flags |= HLUA_STOP;
|
|
WILL_LJMP(hlua_done(L));
|
|
return 0;
|