From 414e65c75b95dd51e226ef9758e9260197c21da6 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Fri, 4 Dec 2020 15:32:02 +0000 Subject: Fire service deregistration events properly. --- src/modules.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/modules.cpp') diff --git a/src/modules.cpp b/src/modules.cpp index 77e4142b3..b6a29fcfa 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -409,7 +409,10 @@ void ModuleManager::DoSafeUnload(Module* mod) { std::multimap::iterator curr = i++; if (curr->second->creator == mod) + { DataProviders.erase(curr); + FOREACH_MOD(OnServiceDel, (*curr->second)); + } } dynamic_reference_base::reset_all(); @@ -599,7 +602,7 @@ void ModuleManager::DelService(ServiceProvider& item) case SERVICE_IOHOOK: { DelReferent(&item); - return; + break; } default: throw ModuleException("Cannot delete unknown service type"); -- cgit v1.3.1-10-gc9f91 From eda0e5e2f0509a3eea823f64c4acea8ac970b9a4 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Fri, 4 Dec 2020 15:55:28 +0000 Subject: Improve the logging of service adding/deleting. --- include/base.h | 3 +++ src/modules.cpp | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+) (limited to 'src/modules.cpp') diff --git a/include/base.h b/include/base.h index cccc130c5..b915d9ae4 100644 --- a/include/base.h +++ b/include/base.h @@ -259,6 +259,9 @@ class CoreExport ServiceProvider : public classbase ServiceProvider(Module* Creator, const std::string& Name, ServiceType Type); virtual ~ServiceProvider(); + /** Retrieves a string that represents the type of this service. */ + const char* GetTypeString() const; + /** Register this service in the appropriate registrar */ virtual void RegisterService(); diff --git a/src/modules.cpp b/src/modules.cpp index b6a29fcfa..a39fcb6c1 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -167,6 +167,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"; +} + ModuleManager::ModuleManager() { } @@ -565,6 +585,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: @@ -592,6 +614,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: -- cgit v1.3.1-10-gc9f91