X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/6002ccec6b037f2370ddee42d64a6c4013d7faca..41390bfe5f:/ircd/modules.c diff --git a/ircd/modules.c b/ircd/modules.c index 1d969af7..ffa08077 100644 --- a/ircd/modules.c +++ b/ircd/modules.c @@ -668,3 +668,38 @@ load_a_module(const char *path, bool warn, int origin, bool core) rb_free(mod_displayname); return true; } + +void +modules_do_restart(void *unused) +{ + unsigned int modnum = 0; + rb_dlink_node *ptr, *nptr; + + RB_DLINK_FOREACH_SAFE(ptr, nptr, module_list.head) + { + struct module *mod = ptr->data; + 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++; + } + + load_all_modules(false); + load_core_modules(false); + rehash(false); + + sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, + "Module Restart: %u modules unloaded, %lu modules loaded", + modnum, rb_dlink_list_length(&module_list)); + ilog(L_MAIN, "Module Restart: %u modules unloaded, %lu modules loaded", modnum, rb_dlink_list_length(&module_list)); +}