diff options
author | Attila Molnar <attilamolnar@hush.com> | 2016-04-25 13:15:06 +0200 |
---|---|---|
committer | Attila Molnar <attilamolnar@hush.com> | 2016-04-25 13:15:06 +0200 |
commit | 657fcc1f6bcb025e7659577b13afdf4d88cce8a5 (patch) | |
tree | 8f6296731e7cf0272bc278db9d830272b43dab6b /src | |
parent | 53f266a35ff6201d606a4e8f66f0c6cccb630891 (diff) |
m_spanningtree Call the OnServerSplit hook from the OnUnloadModule() handler on unload
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/m_spanningtree/main.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp index 5b3f9c0bb..0b9bb65df 100644 --- a/src/modules/m_spanningtree/main.cpp +++ b/src/modules/m_spanningtree/main.cpp @@ -25,6 +25,7 @@ #include "socket.h" #include "xline.h" #include "iohook.h" +#include "modules/spanningtree.h" #include "resolvers.h" #include "main.h" @@ -613,6 +614,21 @@ void ModuleSpanningTree::OnUnloadModule(Module* mod) return; ServerInstance->PI->SendMetaData("modules", "-" + mod->ModuleSourceFile); + if (mod == this) + { + // We are being unloaded, inform modules about all servers splitting which cannot be done later when the servers are actually disconnected + const server_hash& servers = Utils->serverlist; + for (server_hash::const_iterator i = servers.begin(); i != servers.end(); ++i) + { + TreeServer* server = i->second; + if (!server->IsRoot()) + FOREACH_MOD_CUSTOM(GetEventProvider(), SpanningTreeEventListener, OnServerSplit, (server)); + } + return; + } + + // Some other module is being unloaded. If it provides an IOHook we use, we must close that server connection now. + restart: // Close all connections which use an IO hook provided by this module const TreeServer::ChildServers& list = Utils->TreeRoot->GetChildren(); |