From a85cfb1db5fd0869366d3178e4103c72cbfe2a83 Mon Sep 17 00:00:00 2001 From: Thierry FOURNIER Date: Fri, 13 Mar 2015 14:50:06 +0100 Subject: [PATCH] BUG/MEDIUM: lua: undetected infinite loop If the Lua code causes an infinite loop without yield possible, the clock is not updated. This patch check the clock when the Lua control code cannot yield. --- src/hlua.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hlua.c b/src/hlua.c index c76eb1ea7..7e416f20c 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -856,7 +856,8 @@ void hlua_hook(lua_State *L, lua_Debug *ar) if (lua_isyieldable(L)) WILL_LJMP(hlua_yieldk(L, 0, 0, NULL, TICK_ETERNITY, HLUA_CTRLYIELD)); - /* If we cannot yield, check the timeout. */ + /* If we cannot yield, update the clock and check the timeout. */ + tv_update_date(0, 1); if (tick_is_expired(hlua->expire, now_ms)) { lua_pushfstring(L, "execution timeout"); WILL_LJMP(lua_error(L));