Comparison

core/modulemanager.lua @ 674:4f506c627b49

modulemanager: module.unload now gets called when modules are being unloaded
author Waqas Hussain <waqas20@gmail.com>
date Wed, 07 Jan 2009 20:03:59 +0500
parent 670:d5cf10b7fc44
child 675:cc82394fea22
comparison
equal deleted inserted replaced
673:c9bc58e84e96 674:4f506c627b49
33 local setmetatable, setfenv, getfenv = setmetatable, setfenv, getfenv; 33 local setmetatable, setfenv, getfenv = setmetatable, setfenv, getfenv;
34 local pairs, ipairs = pairs, ipairs; 34 local pairs, ipairs = pairs, ipairs;
35 local t_insert = table.insert; 35 local t_insert = table.insert;
36 local type = type; 36 local type = type;
37 local next = next; 37 local next = next;
38 local rawget = rawget;
38 39
39 local tostring, print = tostring, print; 40 local tostring, print = tostring, print;
40 41
41 -- We need this to let modules access the real global namespace 42 -- We need this to let modules access the real global namespace
42 local _G = _G; 43 local _G = _G;
132 133
133 function unload(host, name, ...) 134 function unload(host, name, ...)
134 local mod = modulemap[host] and modulemap[host][name]; 135 local mod = modulemap[host] and modulemap[host][name];
135 if not mod then return nil, "module-not-loaded"; end 136 if not mod then return nil, "module-not-loaded"; end
136 137
137 --[[if type(mod.unload) == "function" then 138 if type(rawget(mod, "unload")) == "function" then
138 local ok, err = pcall(mod.unload, ...) 139 local ok, err = pcall(rawget(mod, "unload"), ...)
139 if (not ok) and err then 140 if (not ok) and err then
140 log("warn", "Non-fatal error unloading module '%s' from '%s': %s", name, host, err); 141 log("warn", "Non-fatal error unloading module '%s' from '%s': %s", name, host, err);
141 end 142 end
142 end]] 143 end
143 modulemap[host][name] = nil; 144 modulemap[host][name] = nil;
144 features_table:remove(host, name); 145 features_table:remove(host, name);
145 local params = handler_table:get(host, name); -- , {module.host, origin_type, tag, xmlns} 146 local params = handler_table:get(host, name); -- , {module.host, origin_type, tag, xmlns}
146 for _, param in pairs(params) do 147 for _, param in pairs(params) do
147 local handlers = stanza_handlers:get(param[1], param[2], param[3], param[4]); 148 local handlers = stanza_handlers:get(param[1], param[2], param[3], param[4]);