From: Christopher Faulet Date: Tue, 16 Jul 2019 08:52:40 +0000 (+0200) Subject: BUG/MINOR: hlua: Make the function txn:done() HTX aware X-Git-Tag: v2.1-dev2~388 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4d0e263079380788ba7d66c77471778efac67633;p=thirdparty%2Fhaproxy.git BUG/MINOR: hlua: Make the function txn:done() HTX aware The function hlua_txn_done() still relying, for the HTTP, on the legacy HTTP mode. Now, for HTX streams, it calls the function htx_reply_and_close(). This patch must be backported to 2.0 and 1.9. --- diff --git a/src/hlua.c b/src/hlua.c index a2669be527..23d2aa040a 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -5996,15 +5996,19 @@ __LJMP static int hlua_txn_done(lua_State *L) ic = &htxn->s->req; oc = &htxn->s->res; - if (htxn->s->txn) { - /* HTTP mode, let's stay in sync with the stream */ - b_del(&ic->buf, htxn->s->txn->req.sov); - htxn->s->txn->req.next -= htxn->s->txn->req.sov; - htxn->s->txn->req.sov = 0; - ic->analysers &= AN_REQ_HTTP_XFER_BODY; - oc->analysers = AN_RES_HTTP_XFER_BODY; - htxn->s->txn->req.msg_state = HTTP_MSG_CLOSED; - htxn->s->txn->rsp.msg_state = HTTP_MSG_DONE; + if (IS_HTX_STRM(htxn->s)) + htx_reply_and_close(htxn->s, 0, NULL); + else { + if (htxn->s->txn) { + /* HTTP mode, let's stay in sync with the stream */ + b_del(&ic->buf, htxn->s->txn->req.sov); + htxn->s->txn->req.next -= htxn->s->txn->req.sov; + htxn->s->txn->req.sov = 0; + + ic->analysers &= AN_REQ_HTTP_XFER_BODY; + oc->analysers = AN_RES_HTTP_XFER_BODY; + htxn->s->txn->req.msg_state = HTTP_MSG_CLOSED; + htxn->s->txn->rsp.msg_state = HTTP_MSG_DONE; /* Note that if we want to support keep-alive, we need * to bypass the close/shutr_now calls below, but that @@ -6012,19 +6016,20 @@ __LJMP static int hlua_txn_done(lua_State *L) * processed and the connection header is known (ie * not during TCP rules). */ - } + } - channel_auto_read(ic); - channel_abort(ic); - channel_auto_close(ic); - channel_erase(ic); + channel_auto_read(ic); + channel_abort(ic); + channel_auto_close(ic); + channel_erase(ic); - oc->wex = tick_add_ifset(now_ms, oc->wto); - channel_auto_read(oc); - channel_auto_close(oc); - channel_shutr_now(oc); + oc->wex = tick_add_ifset(now_ms, oc->wto); + channel_auto_read(oc); + channel_auto_close(oc); + channel_shutr_now(oc); - ic->analysers = 0; + ic->analysers = 0; + } hlua->flags |= HLUA_STOP; WILL_LJMP(hlua_done(L));