From: Christopher Faulet Date: Tue, 28 Jul 2020 08:33:25 +0000 (+0200) Subject: MEDIUM: lua: Add support for the Lua 5.4 X-Git-Tag: v2.3-dev2~22 X-Git-Url: http://git.haproxy.org/?a=commitdiff_plain;h=08ed98fd7963968de49593304fdd9234812845a4;p=haproxy-2.5.git MEDIUM: lua: Add support for the Lua 5.4 On Lua 5.4, some API changes make HAProxy compilation to fail. Among other things, the lua_resume() function has changed and now takes an extra argument in Lua 5.4 and the error LUA_ERRGCMM was removed. Thus the LUA_VERSION_NUM macro is now tested to know the lua version is used and adapt the code accordingly. Here are listed the incompatibilities with the previous Lua versions : http://www.lua.org/manual/5.4/manual.html#8 This patch comes from the HAproxy's fedora RPM, committed by Tom Callaway : https://src.fedoraproject.org/rpms/haproxy/blob/db970613/f/haproxy-2.2.0-lua-5.4.patch This patch should fix the issue #730. It must be backported to 2.2 and probably as far as 2.0. --- diff --git a/src/hlua.c b/src/hlua.c index 17de7a0..1227db4 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -1069,6 +1069,9 @@ void hlua_hook(lua_State *L, lua_Debug *ar) */ static enum hlua_exec hlua_ctx_resume(struct hlua *lua, int yield_allowed) { +#if defined(LUA_VERSION_NUM) && LUA_VERSION_NUM >= 504 + int nres; +#endif int ret; const char *msg; const char *trace; @@ -1100,7 +1103,11 @@ resume_execution: lua->wake_time = TICK_ETERNITY; /* Call the function. */ +#if defined(LUA_VERSION_NUM) && LUA_VERSION_NUM >= 504 + ret = lua_resume(lua->T, gL.T, lua->nargs, &nres); +#else ret = lua_resume(lua->T, gL.T, lua->nargs); +#endif switch (ret) { case LUA_OK: @@ -7845,10 +7852,12 @@ static int hlua_load(char **args, int section_type, struct proxy *curpx, memprintf(err, "Lua message handler error: %s\n", lua_tostring(gL.T, -1)); lua_pop(gL.T, 1); return -1; +#if defined(LUA_VERSION_NUM) && LUA_VERSION_NUM <= 503 case LUA_ERRGCMM: memprintf(err, "Lua garbage collector error: %s\n", lua_tostring(gL.T, -1)); lua_pop(gL.T, 1); return -1; +#endif default: memprintf(err, "Lua unknown error: %s\n", lua_tostring(gL.T, -1)); lua_pop(gL.T, 1);