]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: lua: timeout error with converters, wrapper and actions.
authorThierry FOURNIER <tfournier@arpalert.org>
Sun, 9 Aug 2015 11:10:24 +0000 (13:10 +0200)
committerWilly Tarreau <w@1wt.eu>
Mon, 10 Aug 2015 04:18:30 +0000 (06:18 +0200)
test conf:

   global
      tune.lua.session-timeout 0
      lua-load lol.lua
      debug
      maxconn 4096

   listen test
   bind 0.0.0.0:10010
mode tcp
tcp-request content lua act_test
balance roundrobin
server test 127.0.0.1:3304

lua test:

   function act_test(txn)
      while true do
         core.Alert("TEST")
      end
   end

The function "act_test()" is not executed because a zero timeout is not
considered as TICK_ETERNITY, but is considered as 0.

This path fix this behavior. This is the same problem than the bugfix
685c014e99195d60db0a9cdbc6483f9c44fd0a67.

src/hlua.c

index 8e92134535d17f3e31095928186740af362619fc..f2e58a9047dcadebb6329d5a1e20f2024a829354 100644 (file)
@@ -3944,7 +3944,7 @@ static int hlua_sample_conv_wrapper(const struct arg *arg_p, struct sample *smp,
                }
 
                /* We must initialize the execution timeouts. */
-               stream->hlua.expire = tick_add(now_ms, hlua_timeout_session);
+               stream->hlua.expire = tick_add_ifset(now_ms, hlua_timeout_session);
 
                /* Set the currently running flag. */
                HLUA_SET_RUN(&stream->hlua);
@@ -4050,7 +4050,7 @@ static int hlua_sample_fetch_wrapper(const struct arg *arg_p, struct sample *smp
                }
 
                /* We must initialize the execution timeouts. */
-               stream->hlua.expire = tick_add(now_ms, hlua_timeout_session);
+               stream->hlua.expire = tick_add_ifset(now_ms, hlua_timeout_session);
 
                /* Set the currently running flag. */
                HLUA_SET_RUN(&stream->hlua);
@@ -4322,7 +4322,7 @@ static int hlua_request_act_wrapper(struct hlua_rule *rule, struct proxy *px,
                }
 
                /* We must initialize the execution timeouts. */
-               s->hlua.expire = tick_add(now_ms, hlua_timeout_session);
+               s->hlua.expire = tick_add_ifset(now_ms, hlua_timeout_session);
 
                /* Set the currently running flag. */
                HLUA_SET_RUN(&s->hlua);