Comparison

core/modulemanager.lua @ 1986:d4ba9d94eb74

modulemanager: Slightly rearranged code for more robust unloading of modules.
author Waqas Hussain <waqas20@gmail.com>
date Sat, 17 Oct 2009 23:48:30 +0500
parent 1960:1e674dae31ae
child 1987:94ecd3e7be87
comparison
equal deleted inserted replaced
1985:9b352c8a32e6 1986:d4ba9d94eb74
168 local ok, err = call_module_method(mod, "unload"); 168 local ok, err = call_module_method(mod, "unload");
169 if (not ok) and err then 169 if (not ok) and err then
170 log("warn", "Non-fatal error unloading module '%s' on '%s': %s", name, host, err); 170 log("warn", "Non-fatal error unloading module '%s' on '%s': %s", name, host, err);
171 end 171 end
172 end 172 end
173 modulemap[host][name] = nil;
174 local params = handler_table:get(host, name); -- , {module.host, origin_type, tag, xmlns} 173 local params = handler_table:get(host, name); -- , {module.host, origin_type, tag, xmlns}
175 for _, param in pairs(params or NULL) do 174 for _, param in pairs(params or NULL) do
176 local handlers = stanza_handlers:get(param[1], param[2], param[3], param[4]); 175 local handlers = stanza_handlers:get(param[1], param[2], param[3], param[4]);
177 if handlers then 176 if handlers then
178 handler_info[handlers[1]] = nil; 177 handler_info[handlers[1]] = nil;
185 for handler in pairs(handlers or NULL) do 184 for handler in pairs(handlers or NULL) do
186 (hosts[host] or prosody).events.remove_handler(event, handler); 185 (hosts[host] or prosody).events.remove_handler(event, handler);
187 end 186 end
188 end 187 end
189 hooks:remove(host, name); 188 hooks:remove(host, name);
189 modulemap[host][name] = nil;
190 return true; 190 return true;
191 end 191 end
192 192
193 function reload(host, name, ...) 193 function reload(host, name, ...)
194 local mod = get_module(host, name); 194 local mod = get_module(host, name);