aboutsummaryrefslogtreecommitdiff
path: root/src/modules/m_spanningtree
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/m_spanningtree')
-rw-r--r--src/modules/m_spanningtree/treeserver.cpp4
-rw-r--r--src/modules/m_spanningtree/treesocket2.cpp2
2 files changed, 5 insertions, 1 deletions
diff --git a/src/modules/m_spanningtree/treeserver.cpp b/src/modules/m_spanningtree/treeserver.cpp
index 6920fc97b..d0afe6c5d 100644
--- a/src/modules/m_spanningtree/treeserver.cpp
+++ b/src/modules/m_spanningtree/treeserver.cpp
@@ -211,6 +211,10 @@ void TreeServer::SQuitChild(TreeServer* server, const std::string& reason, bool
void TreeServer::SQuitInternal(unsigned int& num_lost_servers, bool error)
{
+ // Don't squit a server which is already dead.
+ if (isdead)
+ return;
+
ServerInstance->Logs->Log(MODNAME, LOG_DEBUG, "Server %s lost in split", GetName().c_str());
for (ChildServers::const_iterator i = Children.begin(); i != Children.end(); ++i)
diff --git a/src/modules/m_spanningtree/treesocket2.cpp b/src/modules/m_spanningtree/treesocket2.cpp
index e46e9a84d..809418768 100644
--- a/src/modules/m_spanningtree/treesocket2.cpp
+++ b/src/modules/m_spanningtree/treesocket2.cpp
@@ -417,7 +417,7 @@ void TreeSocket::Close()
// Connection closed.
// If the connection is fully up (state CONNECTED)
// then propagate a netsplit to all peers.
- if (MyRoot)
+ if (MyRoot && !MyRoot->IsDead())
MyRoot->SQuit(getError(), true);
else
ServerInstance->SNO->WriteGlobalSno('l', "Connection to '\002%s\002' failed.", linkID.c_str());