aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules.cpp
diff options
context:
space:
mode:
authorGravatar Sadie Powell2020-12-04 18:18:07 +0000
committerGravatar Sadie Powell2020-12-04 18:44:40 +0000
commit3ab889537fb4c7b5b3507562563eec8211d0cc58 (patch)
tree254ba171bfe3c8d0ebd4826cc2d51c7befbd6fc2 /src/modules.cpp
parentMove ban checking to core_channel. (diff)
parentImprove the logging of service adding/deleting. (diff)
Merge branch 'insp3' into master.
Diffstat (limited to 'src/modules.cpp')
-rw-r--r--src/modules.cpp29
1 files changed, 28 insertions, 1 deletions
diff --git a/src/modules.cpp b/src/modules.cpp
index 3a36d82ad..9ccbf95f2 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -166,6 +166,26 @@ void ServiceProvider::DisableAutoRegister()
stdalgo::erase(*ServerInstance->Modules.NewServices, this);
}
+const char* ServiceProvider::GetTypeString() const
+{
+ switch (service)
+ {
+ case SERVICE_COMMAND:
+ return "command";
+ case SERVICE_MODE:
+ return "mode";
+ case SERVICE_METADATA:
+ return "metadata";
+ case SERVICE_IOHOOK:
+ return "iohook";
+ case SERVICE_DATA:
+ return "data service";
+ case SERVICE_CUSTOM:
+ return "module service";
+ }
+ return "unknown service";
+}
+
bool ModuleManager::Attach(Implementation i, Module* mod)
{
if (stdalgo::isin(EventHandlers[i], mod))
@@ -400,7 +420,10 @@ void ModuleManager::DoSafeUnload(Module* mod)
{
std::multimap<std::string, ServiceProvider*>::iterator curr = i++;
if (curr->second->creator == mod)
+ {
DataProviders.erase(curr);
+ FOREACH_MOD(OnServiceDel, (*curr->second));
+ }
}
dynamic_reference_base::reset_all();
@@ -549,6 +572,8 @@ void ModuleManager::AddServices(const ServiceList& list)
void ModuleManager::AddService(ServiceProvider& item)
{
+ ServerInstance->Logs.Log("SERVICE", LOG_DEBUG, "Adding %s %s provided by %s", item.name.c_str(),
+ item.GetTypeString(), item.creator ? item.creator->ModuleSourceFile.c_str() : "the core");
switch (item.service)
{
case SERVICE_DATA:
@@ -576,6 +601,8 @@ void ModuleManager::AddService(ServiceProvider& item)
void ModuleManager::DelService(ServiceProvider& item)
{
+ ServerInstance->Logs.Log("SERVICE", LOG_DEBUG, "Deleting %s %s provided by %s", item.name.c_str(),
+ item.GetTypeString(), item.creator ? item.creator->ModuleSourceFile.c_str() : "the core");
switch (item.service)
{
case SERVICE_MODE:
@@ -586,7 +613,7 @@ void ModuleManager::DelService(ServiceProvider& item)
case SERVICE_IOHOOK:
{
DelReferent(&item);
- return;
+ break;
}
default:
throw ModuleException("Cannot delete unknown service type");