CullResult TreeServer::cull() { // Recursively cull all servers that are under us in the tree for (ChildServers::const_iterator i = Children.begin(); i != Children.end(); ++i) { TreeServer* server = *i; server->cull(); } if (!IsRoot()) ServerUser->cull(); return classbase::cull(); }
/** Removes child nodes of this node, and of that node, etc etc. * This is used during netsplits to automatically tidy up the * server tree. It is slow, we don't use it for much else. */ void TreeServer::Tidy() { while (1) { std::vector<TreeServer*>::iterator a = Children.begin(); if (a == Children.end()) return; TreeServer* s = *a; s->Tidy(); s->cull(); Children.erase(a); delete s; } }