From 30db5cc1c17424acaaaee24366e57ca7e704b484 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Tue, 19 Feb 2019 10:25:58 +0100 Subject: [PATCH] collectd: fix lua callback registration If you want to register more than one lua plugin, you cannot start the collectd. You get always the error message: "The read function "lua/(null)" is already registered. Check for duplicates in your configuration!" This is not what I expect and what the documenation says. With this change it is now possible to registrate more then one lua Script. See https://github.com/collectd/collectd/pull/2379 Signed-off-by: Florian Eckert --- .../930-fix-lua-callback-registration.patch | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 utils/collectd/patches/930-fix-lua-callback-registration.patch diff --git a/utils/collectd/patches/930-fix-lua-callback-registration.patch b/utils/collectd/patches/930-fix-lua-callback-registration.patch new file mode 100644 index 000000000..bffe656e0 --- /dev/null +++ b/utils/collectd/patches/930-fix-lua-callback-registration.patch @@ -0,0 +1,42 @@ +--- a/src/lua.c ++++ b/src/lua.c +@@ -281,9 +281,6 @@ static int lua_cb_register_read(lua_Stat + + luaL_checktype(L, 1, LUA_TFUNCTION); + +- char function_name[DATA_MAX_NAME_LEN]; +- snprintf(function_name, sizeof(function_name), "lua/%s", lua_tostring(L, 1)); +- + int callback_id = clua_store_callback(L, 1); + if (callback_id < 0) + return luaL_error(L, "%s", "Storing callback function failed"); +@@ -298,6 +295,9 @@ static int lua_cb_register_read(lua_Stat + if (cb == NULL) + return luaL_error(L, "%s", "calloc failed"); + ++ char function_name[DATA_MAX_NAME_LEN]; ++ snprintf(function_name, sizeof(function_name), "lua/%p", thread); ++ + cb->lua_state = thread; + cb->callback_id = callback_id; + cb->lua_function_name = strdup(function_name); +@@ -325,9 +325,6 @@ static int lua_cb_register_write(lua_Sta + + luaL_checktype(L, 1, LUA_TFUNCTION); + +- char function_name[DATA_MAX_NAME_LEN] = ""; +- snprintf(function_name, sizeof(function_name), "lua/%s", lua_tostring(L, 1)); +- + int callback_id = clua_store_callback(L, 1); + if (callback_id < 0) + return luaL_error(L, "%s", "Storing callback function failed"); +@@ -342,6 +339,9 @@ static int lua_cb_register_write(lua_Sta + if (cb == NULL) + return luaL_error(L, "%s", "calloc failed"); + ++ char function_name[DATA_MAX_NAME_LEN] = ""; ++ snprintf(function_name, sizeof(function_name), "lua/%p", thread); ++ + cb->lua_state = thread; + cb->callback_id = callback_id; + cb->lua_function_name = strdup(function_name);