]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: lua: only allow actions to yield if not in a final call
authorWilly Tarreau <w@1wt.eu>
Sun, 27 Sep 2015 08:48:01 +0000 (10:48 +0200)
committerWilly Tarreau <w@1wt.eu>
Sun, 27 Sep 2015 09:04:19 +0000 (11:04 +0200)
Actions may yield but must not do it during the final call from a ruleset
because it indicates there will be no more opportunity to complete or
clean up. This is indicated by ACT_FLAG_FINAL in the action's flags,
which must be passed to hlua_resume().

Thanks to this, an action called from a TCP ruleset is properly woken
up and possibly finished when the client disconnects.

src/hlua.c

index c641c78e04af7b1cae95336f47fe98628d343036..77058f057f27adcdb713d12f087b92a20d072f08 100644 (file)
@@ -4549,7 +4549,7 @@ static enum act_return hlua_action(struct act_rule *rule, struct proxy *px,
        }
 
        /* Execute the function. */
-       switch (hlua_ctx_resume(&s->hlua, 1)) {
+       switch (hlua_ctx_resume(&s->hlua, !(flags & ACT_FLAG_FINAL))) {
        /* finished. */
        case HLUA_E_OK:
                if (!hlua_check_proto(s, dir))