]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_spanningtree/utils.cpp
Add explicit reference-counting base class
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / utils.cpp
index 729f6d4ee5617bada8bc97bcc41ded37fe3eba78..6f94ead60ed9021de4761aa5162adf5eafbf08b5 100644 (file)
@@ -157,11 +157,11 @@ SpanningTreeUtilities::SpanningTreeUtilities(ModuleSpanningTree* C) : Creator(C)
        this->ReadConfiguration(true);
 }
 
-SpanningTreeUtilities::~SpanningTreeUtilities()
+bool SpanningTreeUtilities::cull()
 {
        for (unsigned int i = 0; i < Bindings.size(); i++)
        {
-               delete Bindings[i];
+               Bindings[i]->cull();
        }
 
        while (TreeRoot->ChildCount())
@@ -170,15 +170,24 @@ SpanningTreeUtilities::~SpanningTreeUtilities()
                if (child_server)
                {
                        TreeSocket* sock = child_server->GetSocket();
-                       ServerInstance->SE->DelFd(sock);
                        sock->Close();
                }
        }
-       
-       // This avoids a collision on reload
+
        ServerUser->uuid = TreeRoot->GetID();
+       if (ServerUser->cull())
+               delete ServerUser;
+       return true;
+}
+
+SpanningTreeUtilities::~SpanningTreeUtilities()
+{
+       for (unsigned int i = 0; i < Bindings.size(); i++)
+       {
+               delete Bindings[i];
+       }
+
        delete TreeRoot;
-       delete ServerUser;
 }
 
 void SpanningTreeUtilities::AddThisServer(TreeServer* server, TreeServerList &list)