diff --git a/include/types/hlua.h b/include/types/hlua.h index b22e03e7d..698786dd8 100644 --- a/include/types/hlua.h +++ b/include/types/hlua.h @@ -31,6 +31,7 @@ struct stream; #define HLUA_WAKEREQWR 0x00000008 #define HLUA_EXIT 0x00000010 #define HLUA_MUST_GC 0x00000020 +#define HLUA_STOP 0x00000040 #define HLUA_F_AS_STRING 0x01 #define HLUA_F_MAY_USE_HTTP 0x02 diff --git a/src/hlua.c b/src/hlua.c index f9a317d65..5cbfcfef9 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -4810,10 +4810,12 @@ __LJMP static int hlua_txn_set_mark(lua_State *L) __LJMP static int hlua_txn_done(lua_State *L) { struct hlua_txn *htxn; + struct hlua *hlua; struct channel *ic, *oc; MAY_LJMP(check_args(L, 1, "close")); htxn = MAY_LJMP(hlua_checktxn(L, 1)); + hlua = hlua_gethlua(L); /* If the flags NOTERM is set, we cannot terminate the http * session, so we just end the execution of the current @@ -4857,6 +4859,7 @@ __LJMP static int hlua_txn_done(lua_State *L) ic->analysers = 0; + hlua->flags |= HLUA_STOP; WILL_LJMP(hlua_done(L)); return 0; } @@ -5555,6 +5558,8 @@ static enum act_return hlua_action(struct act_rule *rule, struct proxy *px, case HLUA_E_OK: if (!hlua_check_proto(s, dir)) return ACT_RET_ERR; + if (s->hlua.flags & HLUA_STOP) + return ACT_RET_STOP; return ACT_RET_CONT; /* yield. */