]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_spanningtree/treesocket1.cpp
m_spanningtree Minor fixes
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / treesocket1.cpp
index dc9bb53316571af326919ca29c125bc17bf23f4b..3c838177d11ceb4c0ba68740c8337c3a4e482a9a 100644 (file)
@@ -218,7 +218,13 @@ CmdResult CommandSQuit::HandleServer(TreeServer* server, std::vector<std::string
 
        TreeSocket* sock = server->GetSocket();
        sock->Squit(quitting, params[1]);
-       return CMD_SUCCESS;
+
+       // XXX: Return CMD_FAILURE when servers SQUIT themselves (i.e. :00S SQUIT 00S :Shutting down)
+       // to avoid RouteCommand() being called. RouteCommand() requires a valid command source but we
+       // do not have one because the server user is deleted when its TreeServer is destructed.
+       // We generate a SQUIT in TreeSocket::Squit(), with our sid as the source and send it to the
+       // remaining servers.
+       return ((quitting == server) ? CMD_FAILURE : CMD_SUCCESS);
 }
 
 /** This function is called when we receive data from a remote