]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: lua: socket timeouts are not applied
authorCyril Bonté <cyril.bonte@free.fr>
Fri, 17 Aug 2018 21:51:02 +0000 (23:51 +0200)
committerWilly Tarreau <w@1wt.eu>
Fri, 17 Aug 2018 22:23:52 +0000 (00:23 +0200)
Sachin Shetty reported that socket timeouts set in LUA code have no effect.
Indeed, connect timeout is never modified and is always set to its default,
set to 5 seconds. Currently, this patch will apply the specified timeout
value to the connect timeout.
For the read and write timeouts, the issue is that the timeout is updated but
the expiration dates were not updated.

This patch should be backported up to the 1.6 branch.

src/hlua.c

index c29a7cc4ea2d0a4068c4e8f80d439f35ae49d2d8..06c1155611993f734ae136282f4763fccf5a7dce 100644 (file)
@@ -2574,10 +2574,19 @@ __LJMP static int hlua_socket_settimeout(struct lua_State *L)
        si = appctx->owner;
        s = si_strm(si);
 
+       s->sess->fe->timeout.connect = tmout;
        s->req.rto = tmout;
        s->req.wto = tmout;
        s->res.rto = tmout;
        s->res.wto = tmout;
+       s->req.rex = tick_add_ifset(now_ms, tmout);
+       s->req.wex = tick_add_ifset(now_ms, tmout);
+       s->res.rex = tick_add_ifset(now_ms, tmout);
+       s->res.wex = tick_add_ifset(now_ms, tmout);
+
+       s->task->expire = tick_add_ifset(now_ms, tmout);
+       task_queue(s->task);
+
        xref_unlock(&socket->xref, peer);
 
        lua_pushinteger(L, 1);