]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: hlua: Make the function txn:done() HTX aware
authorChristopher Faulet <cfaulet@haproxy.com>
Tue, 16 Jul 2019 08:52:40 +0000 (10:52 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 19 Jul 2019 07:18:27 +0000 (09:18 +0200)
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.

src/hlua.c

index a2669be5278dbf4ea54ffa4c47dc726fc0e0e2f2..23d2aa040a30ab80fac9476c8d656d1ff9dbd36a 100644 (file)
@@ -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));