diff --git a/src/multi.c b/src/multi.c index c8287645..05805310 100644 --- a/src/multi.c +++ b/src/multi.c @@ -162,6 +162,10 @@ void execCommand(redisClient *c) { c->mstate.commands[j].argc = c->argc; c->mstate.commands[j].argv = c->argv; c->mstate.commands[j].cmd = c->cmd; + + /* From time to time, update the cached time so that if the transaction + * is huge, we'll have a chance to have more updated time info. */ + if (j && j % 10000) updateCachedTime(); } c->argv = orig_argv; c->argc = orig_argc; diff --git a/src/scripting.c b/src/scripting.c index 4f807f4e..e9bf0ba6 100644 --- a/src/scripting.c +++ b/src/scripting.c @@ -546,7 +546,8 @@ void luaMaskCountHook(lua_State *lua, lua_Debug *ar) { REDIS_NOTUSED(ar); REDIS_NOTUSED(lua); - elapsed = mstime() - server.lua_time_start; + updateCachedTime(); + elapsed = server.mstime - server.lua_time_start; if (elapsed >= server.lua_time_limit && server.lua_timedout == 0) { redisLog(REDIS_WARNING,"Lua slow script detected: still in execution after %lld milliseconds. You can try killing the script using the SCRIPT KILL command.",elapsed); server.lua_timedout = 1;