lua plugin: Don't destroy interpreter early
[collectd.git] / src / lua.c
index a0364d7..b5d3ce5 100644 (file)
--- a/src/lua.c
+++ b/src/lua.c
@@ -79,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 */
 
@@ -265,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);
 }
 
@@ -474,9 +471,6 @@ static int lua_script_load(const char *script_path) /* {{{ */
     else
       ERROR("Lua plugin: Executing script \"%s\" failed:\n%s",
             script_path, errmsg);
-
-    lua_script_free(script);
-    return -1;
   }
 
   /* Append this script to the global list of scripts. */
@@ -490,6 +484,9 @@ static int lua_script_load(const char *script_path) /* {{{ */
     scripts = script;
   }
 
+  if (status != 0)
+    return -1;
+
   return 0;
 } /* }}} int lua_script_load */