X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Flua.c;h=d1c008504ebf62ae64c69d7e7e7bd53462d81abd;hb=0054089db0e438fb8129f2625a6129b7a73caf9d;hp=45b5b189839abc53dc22b9377d4f0b9ef695129b;hpb=9d3804cb80b39a3b22579c746c08400c97c09843;p=collectd.git diff --git a/src/lua.c b/src/lua.c index 45b5b189..d1c00850 100644 --- a/src/lua.c +++ b/src/lua.c @@ -41,7 +41,6 @@ #include typedef struct lua_script_s { - char *script_path; lua_State *lua_state; struct lua_script_s *next; } lua_script_t; @@ -80,18 +79,14 @@ static int clua_load_callback(lua_State *L, int callback_ref) /* {{{ */ * garbage collector. */ static int clua_store_thread(lua_State *L, int idx) /* {{{ */ { - if (idx < 0) - idx += lua_gettop(L) + 1; - - /* Copy the thread pointer */ - lua_pushvalue(L, idx); /* +1 = 3 */ - if (!lua_isthread(L, -1)) { - lua_pop(L, 3); /* -3 = 0 */ + if (!lua_isthread(L, idx)) { return -1; } + /* Copy the thread pointer */ + lua_pushvalue(L, idx); + luaL_ref(L, LUA_REGISTRYINDEX); - lua_pop(L, 1); /* -1 = 0 */ return 0; } /* }}} int clua_store_thread */ @@ -266,6 +261,7 @@ static int lua_cb_dispatch_values(lua_State *L) /* {{{ */ static void lua_cb_free(void *data) { clua_callback_data_t *cb = data; free(cb->lua_function_name); + pthread_mutex_destroy(&cb->lock); free(cb); } @@ -389,7 +385,6 @@ static void lua_script_free(lua_script_t *script) /* {{{ */ script->lua_state = NULL; } - sfree(script->script_path); sfree(script); lua_script_free(next); @@ -453,14 +448,7 @@ static int lua_script_load(const char *script_path) /* {{{ */ return status; } - script->script_path = strdup(script_path); - if (script->script_path == NULL) { - ERROR("Lua plugin: strdup failed."); - lua_script_free(script); - return -1; - } - - status = luaL_loadfile(script->lua_state, script->script_path); + status = luaL_loadfile(script->lua_state, script_path); if (status != 0) { ERROR("Lua plugin: luaL_loadfile failed: %s", lua_tostring(script->lua_state, -1)); @@ -482,7 +470,7 @@ static int lua_script_load(const char *script_path) /* {{{ */ status); else ERROR("Lua plugin: Executing script \"%s\" failed:\n%s", - script->script_path, errmsg); + script_path, errmsg); lua_script_free(script); return -1;