MEDIUM: lua: only allow actions to yield if not in a final call

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.
This commit is contained in:
Willy Tarreau 2015-09-27 10:48:01 +02:00
parent 394586836f
commit 528192d310

View 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))