projects
/
collectd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
lua plugin: Don't destroy interpreter early
[collectd.git]
/
src
/
lua.c
diff --git
a/src/lua.c
b/src/lua.c
index
45b5b18
..
b5d3ce5
100644
(file)
--- a/
src/lua.c
+++ b/
src/lua.c
@@
-41,7
+41,6
@@
#include <pthread.h>
typedef struct lua_script_s {
#include <pthread.h>
typedef struct lua_script_s {
- char *script_path;
lua_State *lua_state;
struct lua_script_s *next;
} lua_script_t;
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) /* {{{ */
{
* 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;
}
return -1;
}
+ /* Copy the thread pointer */
+ lua_pushvalue(L, idx);
+
luaL_ref(L, LUA_REGISTRYINDEX);
luaL_ref(L, LUA_REGISTRYINDEX);
- lua_pop(L, 1); /* -1 = 0 */
return 0;
} /* }}} int clua_store_thread */
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);
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);
}
free(cb);
}
@@
-389,7
+385,6
@@
static void lua_script_free(lua_script_t *script) /* {{{ */
script->lua_state = NULL;
}
script->lua_state = NULL;
}
- sfree(script->script_path);
sfree(script);
lua_script_free(next);
sfree(script);
lua_script_free(next);
@@
-453,14
+448,7
@@
static int lua_script_load(const char *script_path) /* {{{ */
return status;
}
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));
if (status != 0) {
ERROR("Lua plugin: luaL_loadfile failed: %s",
lua_tostring(script->lua_state, -1));
@@
-482,10
+470,7
@@
static int lua_script_load(const char *script_path) /* {{{ */
status);
else
ERROR("Lua plugin: Executing script \"%s\" failed:\n%s",
status);
else
ERROR("Lua plugin: Executing script \"%s\" failed:\n%s",
- script->script_path, errmsg);
-
- lua_script_free(script);
- return -1;
+ script_path, errmsg);
}
/* Append this script to the global list of scripts. */
}
/* Append this script to the global list of scripts. */
@@
-499,6
+484,9
@@
static int lua_script_load(const char *script_path) /* {{{ */
scripts = script;
}
scripts = script;
}
+ if (status != 0)
+ return -1;
+
return 0;
} /* }}} int lua_script_load */
return 0;
} /* }}} int lua_script_load */