X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules.cpp;h=7ac4d2062aa3657d278a726bd6eb1777c69fc928;hb=551d687ec6d7ce44be35fae0dd7345fe73c4f63a;hp=1194e835864cdb885b291641a616ad7b82a412a0;hpb=9eeae941959511957abd770ed8e11f3ecdcd739e;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules.cpp b/src/modules.cpp index 1194e8358..7ac4d2062 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -109,7 +109,7 @@ ModResult Module::OnUserPreNotice(User*, void*, int, std::string&, char, CUList& ModResult Module::OnUserPreNick(User*, const std::string&) { return MOD_RES_PASSTHRU; } void Module::OnUserPostNick(User*, const std::string&) { } ModResult Module::OnPreMode(User*, User*, Channel*, const std::vector&) { return MOD_RES_PASSTHRU; } -void Module::On005Numeric(std::string&) { } +void Module::On005Numeric(std::map&) { } ModResult Module::OnKill(User*, User*, const std::string&) { return MOD_RES_PASSTHRU; } void Module::OnLoadModule(Module*) { } void Module::OnUnloadModule(Module*) { } @@ -331,13 +331,13 @@ bool ModuleManager::CanUnload(Module* mod) if (modfind == Modules.end() || modfind->second != mod) { LastModuleError = "Module " + mod->ModuleSourceFile + " is not loaded, cannot unload it!"; - ServerInstance->Logs->Log("MODULE", DEFAULT, LastModuleError); + ServerInstance->Logs->Log("MODULE", LOG_DEFAULT, LastModuleError); return false; } if (mod->GetVersion().Flags & VF_STATIC) { LastModuleError = "Module " + mod->ModuleSourceFile + " not unloadable (marked static)"; - ServerInstance->Logs->Log("MODULE", DEFAULT, LastModuleError); + ServerInstance->Logs->Log("MODULE", LOG_DEFAULT, LastModuleError); return false; } return true; @@ -345,6 +345,11 @@ bool ModuleManager::CanUnload(Module* mod) void ModuleManager::DoSafeUnload(Module* mod) { + // First, notify all modules that a module is about to be unloaded, so in case + // they pass execution to the soon to be unloaded module, it will happen now, + // i.e. before we unregister the services of the module being unloaded + FOREACH_MOD(I_OnUnloadModule,OnUnloadModule(mod)); + std::map::iterator modfind = Modules.find(mod->ModuleSourceFile); std::vector > items; @@ -385,16 +390,14 @@ void ModuleManager::DoSafeUnload(Module* mod) /* Tidy up any dangling resolvers */ ServerInstance->Res->CleanResolvers(mod); - FOREACH_MOD(I_OnUnloadModule,OnUnloadModule(mod)); - DetachAll(mod); Modules.erase(modfind); ServerInstance->GlobalCulls.AddItem(mod); - ServerInstance->Logs->Log("MODULE", DEFAULT,"Module %s unloaded",mod->ModuleSourceFile.c_str()); + ServerInstance->Logs->Log("MODULE", LOG_DEFAULT,"Module %s unloaded",mod->ModuleSourceFile.c_str()); this->ModCount--; - ServerInstance->BuildISupport(); + ServerInstance->ISupport.Build(); } void ModuleManager::UnloadAll()