aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/componentmanager.lua15
-rw-r--r--core/modulemanager.lua7
2 files changed, 18 insertions, 4 deletions
diff --git a/core/componentmanager.lua b/core/componentmanager.lua
index 72cdda14..afed1df3 100644
--- a/core/componentmanager.lua
+++ b/core/componentmanager.lua
@@ -21,7 +21,8 @@
local log = require "util.logger".init("componentmanager");
-local module_load = require "core.modulemanager".load;
+local module_load = require "core.modulemanager".load;
+local module_unload = require "core.modulemanager".unload;
local jid_split = require "util.jid".split;
local hosts = hosts;
@@ -56,5 +57,17 @@ function register_component(host, component)
log("error", "Attempt to set component for existing host: "..host);
end
end
+
+function deregister_component(host, component)
+ if components[host] then
+ module_unload(host, "dialback");
+ components[host] = nil;
+ hosts[host] = nil;
+ log("debug", "component removed: "..host);
+ return true;
+ else
+ log("error", "Attempt to remove component for non-existing host: "..host);
+ end
+end
return _M;
diff --git a/core/modulemanager.lua b/core/modulemanager.lua
index 7ead4db0..4d654ae0 100644
--- a/core/modulemanager.lua
+++ b/core/modulemanager.lua
@@ -35,6 +35,7 @@ local pairs, ipairs = pairs, ipairs;
local t_insert = table.insert;
local type = type;
local next = next;
+local rawget = rawget;
local tostring, print = tostring, print;
@@ -136,12 +137,12 @@ 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 type(rawget(mod, "unload")) == "function" then
+ local ok, err = pcall(rawget(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
modulemap[host][name] = nil;
features_table:remove(host, name);
local params = handler_table:get(host, name); -- , {module.host, origin_type, tag, xmlns}