From: Thierry Fournier Date: Fri, 19 Feb 2016 19:53:30 +0000 (+0100) Subject: MINOR: lua: post initialization X-Git-Tag: v1.7-dev3~81 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3d4a675f244f3b2a9249d8e4d9a9198ad9791c7b;p=thirdparty%2Fhaproxy.git MINOR: lua: post initialization This patch adds a Lua post initialisation wrapper. It already exists for pure Lua function, now it executes also C. It is useful for doing things when the configuration is ready to use. For example we can can browse and register all the proxies. --- diff --git a/include/proto/hlua_fcn.h b/include/proto/hlua_fcn.h index 9c5d9081b7..e4ce5f0912 100644 --- a/include/proto/hlua_fcn.h +++ b/include/proto/hlua_fcn.h @@ -6,6 +6,7 @@ void hlua_class_const_str(lua_State *L, const char *name, const char *value); void hlua_class_function(lua_State *L, const char *name, int (*function)(lua_State *L)); void *hlua_checkudata(lua_State *L, int ud, int class_ref); int hlua_register_metatable(struct lua_State *L, char *name); +int hlua_fcn_post_init(lua_State *L); int hlua_fcn_reg_core_fcn(lua_State *L); int hlua_dump_object(lua_State *L); diff --git a/src/hlua.c b/src/hlua.c index 89b3a795fb..0f491255ba 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -6444,6 +6444,18 @@ int hlua_post_init() enum hlua_exec ret; const char *error; + /* Call post initialisation function in safe environement. */ + if (!SET_SAFE_LJMP(gL.T)) { + if (lua_type(gL.T, -1) == LUA_TSTRING) + error = lua_tostring(gL.T, -1); + else + error = "critical error"; + fprintf(stderr, "Lua post-init: %s.\n", error); + exit(1); + } + hlua_fcn_post_init(gL.T); + RESET_SAFE_LJMP(gL.T); + list_for_each_entry(init, &hlua_init_functions, l) { lua_rawgeti(gL.T, LUA_REGISTRYINDEX, init->function_ref); ret = hlua_ctx_resume(&gL, 0); diff --git a/src/hlua_fcn.c b/src/hlua_fcn.c index 1dcd650f2a..215058a879 100644 --- a/src/hlua_fcn.c +++ b/src/hlua_fcn.c @@ -313,6 +313,11 @@ static int hlua_concat_init(lua_State *L) return 1; } +int hlua_fcn_post_init(lua_State *L) +{ + return 1; +} + int hlua_fcn_reg_core_fcn(lua_State *L) { if (!hlua_concat_init(L))