diff --git a/userspace/digwatch/digwatch.cpp b/userspace/digwatch/digwatch.cpp index 24a5a887..d58c522a 100644 --- a/userspace/digwatch/digwatch.cpp +++ b/userspace/digwatch/digwatch.cpp @@ -150,6 +150,7 @@ int digwatch_init(int argc, char **argv) int long_index = 0; string lua_main_filename; string lua_dir = DIGWATCH_INSTALLATION_DIR; + lua_State* ls; static struct option long_options[] = { @@ -259,7 +260,11 @@ int digwatch_init(int argc, char **argv) lua_main_filename = lua_dir + DIGWATCH_LUA_MAIN; } - rules = new digwatch_rules(inspector, lua_main_filename, lua_dir); + // Initialize Lua interpreter + ls = lua_open(); + luaL_openlibs(ls); + + rules = new digwatch_rules(inspector, ls, lua_main_filename, lua_dir); rules->load_rules(rules_file); inspector->set_filter(rules->get_filter()); @@ -290,6 +295,7 @@ exit: delete inspector; } + lua_close(ls); return result; } diff --git a/userspace/digwatch/rules.cpp b/userspace/digwatch/rules.cpp index 4bbe9088..0b50c9ef 100644 --- a/userspace/digwatch/rules.cpp +++ b/userspace/digwatch/rules.cpp @@ -15,13 +15,11 @@ const static struct luaL_reg ll_digwatch [] = {NULL,NULL} }; -digwatch_rules::digwatch_rules(sinsp* inspector, string lua_main_filename, string lua_dir) +digwatch_rules::digwatch_rules(sinsp* inspector, lua_State *ls, string lua_main_filename, string lua_dir) { g_inspector = inspector; - // Initialize Lua interpreter - m_ls = lua_open(); - luaL_openlibs(m_ls); + m_ls = ls; m_lua_parser = new lua_parser(inspector, m_ls); diff --git a/userspace/digwatch/rules.h b/userspace/digwatch/rules.h index bdec045a..60b15e81 100644 --- a/userspace/digwatch/rules.h +++ b/userspace/digwatch/rules.h @@ -8,7 +8,7 @@ class sinsp_evt_formatter; class digwatch_rules { public: - digwatch_rules(sinsp* inspector, string lua_main_filename, string lua_dir); + digwatch_rules(sinsp* inspector, lua_State *ls, string lua_main_filename, string lua_dir); ~digwatch_rules(); void load_rules(string rules_filename); sinsp_filter* get_filter();