Core modules cannot be unloaded, otherwise bad things happen.

Additionally some information is logged and passed to the operator
conducting a MODRESTART.
This commit is contained in:
Jason Volk 2016-06-21 17:39:44 -07:00
parent 94afbe9c8e
commit b5cfad0319
2 changed files with 16 additions and 1 deletions

View file

@ -294,6 +294,9 @@ unload_one_module(const char *name, bool warn)
if((mod = findmodule_byname(name)) == NULL) if((mod = findmodule_byname(name)) == NULL)
return false; return false;
if(mod->core)
return false;
/* /*
** XXX - The type system in C does not allow direct conversion between ** XXX - The type system in C does not allow direct conversion between
** data and function pointers, but as it happens, most C compilers will ** data and function pointers, but as it happens, most C compilers will

View file

@ -349,7 +349,19 @@ do_modrestart(struct Client *source_p)
RB_DLINK_FOREACH_SAFE(ptr, nptr, module_list.head) RB_DLINK_FOREACH_SAFE(ptr, nptr, module_list.head)
{ {
struct module *mod = ptr->data; struct module *mod = ptr->data;
unload_one_module(mod->name, false); if(!unload_one_module(mod->name, false))
{
ilog(L_MAIN, "Module Restart: %s was not unloaded %s",
mod->name,
mod->core? "(core module)" : "");
if(!mod->core)
sendto_realops_snomask(SNO_GENERAL, L_NETWIDE,
"Module Restart: %s failed to unload",
mod->name);
continue;
}
modnum++; modnum++;
} }