X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Flua.c;h=45b5b189839abc53dc22b9377d4f0b9ef695129b;hb=c4439c9cb3e2348ad7013644731de27a55eca478;hp=d91676c9fd765aa8ebf0c044a30431348906f00a;hpb=839dbf244f96d08c02d18e1fc64264b1740e6fc6;p=collectd.git diff --git a/src/lua.c b/src/lua.c index d91676c9..45b5b189 100644 --- a/src/lua.c +++ b/src/lua.c @@ -48,7 +48,7 @@ typedef struct lua_script_s { typedef struct { lua_State *lua_state; - const char *lua_function_name; + char *lua_function_name; pthread_mutex_t lock; int callback_id; } clua_callback_data_t; @@ -263,6 +263,12 @@ static int lua_cb_dispatch_values(lua_State *L) /* {{{ */ return 0; } /* }}} lua_cb_dispatch_values */ +static void lua_cb_free(void *data) { + clua_callback_data_t *cb = data; + free(cb->lua_function_name); + free(cb); +} + static int lua_cb_register_read(lua_State *L) /* {{{ */ { int nargs = lua_gettop(L); @@ -294,13 +300,14 @@ static int lua_cb_register_read(lua_State *L) /* {{{ */ cb->lua_function_name = strdup(function_name); pthread_mutex_init(&cb->lock, NULL); - int status = plugin_register_complex_read(/* group = */ "lua", - /* name = */ function_name, - /* callback = */ clua_read, - /* interval = */ 0, - &(user_data_t){ - .data = cb, - }); + int status = + plugin_register_complex_read(/* group = */ "lua", + /* name = */ function_name, + /* callback = */ clua_read, + /* interval = */ 0, + &(user_data_t){ + .data = cb, .free_func = lua_cb_free, + }); if (status != 0) return luaL_error(L, "%s", "plugin_register_complex_read failed"); @@ -341,7 +348,7 @@ static int lua_cb_register_write(lua_State *L) /* {{{ */ int status = plugin_register_write(/* name = */ function_name, /* callback = */ clua_write, &(user_data_t){ - .data = cb, + .data = cb, .free_func = lua_cb_free, }); if (status != 0)