#include <pthread.h>
typedef struct lua_script_s {
- char *script_path;
lua_State *lua_state;
struct lua_script_s *next;
} lua_script_t;
* 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 */
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);
}
script->lua_state = NULL;
}
- sfree(script->script_path);
sfree(script);
lua_script_free(next);
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));
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. */
scripts = script;
}
+ if (status != 0)
+ return -1;
+
return 0;
} /* }}} int lua_script_load */