]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_spanningtree/treeserver.cpp
Merge branch 'master+stfjoinforward'
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / treeserver.cpp
index 0acffbb70f212fd957154976cfbafe793b82ae8b..98d7c87545b6a3229a81f051f8b1e24d1e0fc475 100644 (file)
@@ -185,11 +185,7 @@ void TreeServer::SQuitChild(TreeServer* server, const std::string& reason)
        server->SQuitInternal(num_lost_servers);
 
        const std::string quitreason = GetName() + " " + server->GetName();
-
-       ModuleSpanningTree* st = Utils->Creator;
-       st->SplitInProgress = true;
        unsigned int num_lost_users = QuitUsers(quitreason);
-       st->SplitInProgress = false;
 
        ServerInstance->SNO->WriteToSnoMask(IsRoot() ? 'l' : 'L', "Netsplit complete, lost \002%u\002 user%s on \002%u\002 server%s.",
                num_lost_users, num_lost_users != 1 ? "s" : "", num_lost_servers, num_lost_servers != 1 ? "s" : "");
@@ -326,13 +322,7 @@ void TreeServer::AddChild(TreeServer* Child)
 
 bool TreeServer::DelChild(TreeServer* Child)
 {
-       std::vector<TreeServer*>::iterator it = std::find(Children.begin(), Children.end(), Child);
-       if (it != Children.end())
-       {
-               Children.erase(it);
-               return true;
-       }
-       return false;
+       return stdalgo::erase(Children, Child);
 }
 
 CullResult TreeServer::cull()
@@ -362,6 +352,10 @@ TreeServer::~TreeServer()
 
 void TreeServer::RemoveHash()
 {
+       // XXX: Erase server from UserManager::uuidlist now, to allow sid reuse in the current main loop
+       // iteration, before the cull list is applied
+       ServerInstance->Users->uuidlist.erase(sid);
+
        Utils->sidlist.erase(sid);
        Utils->serverlist.erase(GetName());
 }