Changeset

439:6608ad3a72f3

is_loaded() and incomplete unload() for modules
author Matthew Wild <mwild1@gmail.com>
date Thu, 27 Nov 2008 16:52:30 +0000
parents 438:193f9dd64f17
children 440:dee02bf4656a
files core/modulemanager.lua
diffstat 1 files changed, 20 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/core/modulemanager.lua	Thu Nov 27 03:12:12 2008 +0000
+++ b/core/modulemanager.lua	Thu Nov 27 16:52:30 2008 +0000
@@ -27,6 +27,9 @@
 
 
 function load(host, module_name, config)
+	if not (host and module_name) then
+		return nil, "insufficient-parameters";
+	end
 	local mod, err = loadfile("plugins/mod_"..module_name..".lua");
 	if not mod then
 		log("error", "Unable to load module '%s': %s", module_name or "nil", err or "nil");
@@ -59,6 +62,23 @@
 	return true;
 end
 
+function is_loaded(host, name)
+	return modulemap[host] and modulemap[host][name] and true;
+end
+
+function unload(host, name, ...)
+	local mod = modulemap[host] and modulemap[host][name];
+	if not mod then return nil, "module-not-loaded"; end
+	
+	if type(mod.unload) == "function" then
+		local ok, err = pcall(mod.unload, ...)
+		if (not ok) and err then
+			log("warn", "Non-fatal error unloading module '%s' from '%s': %s", name, host, err);
+		end
+	end
+	
+end
+
 function handle_stanza(host, origin, stanza)
 	local name, xmlns, origin_type = stanza.name, stanza.attr.xmlns, origin.type;