aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Sadie Powell2022-02-01 16:00:54 +0000
committerGravatar Sadie Powell2022-02-01 16:00:54 +0000
commit95868f7458e03f76dc6babfcefa993a63fb31b56 (patch)
treee57400d2509f8016a6591e1ea5185eb5beb6cbf7
parentThe target in OnDecodeMetaData can be nullptr sometimes. (diff)
parentFix splitting servers multiple times in some cases. (diff)
Merge branch 'insp3' into master.
-rw-r--r--make/template/apparmor4
-rw-r--r--src/modules/m_spanningtree/treeserver.cpp4
-rw-r--r--src/modules/m_spanningtree/treesocket2.cpp6
3 files changed, 11 insertions, 3 deletions
diff --git a/make/template/apparmor b/make/template/apparmor
index 15ecacd54..9bdf6915d 100644
--- a/make/template/apparmor
+++ b/make/template/apparmor
@@ -44,4 +44,8 @@
# Required by the mysql module:
#include <abstractions/mysql>
+
+ # Required by the ssl_gnutls, ssl_mbedtls, and ssl_openssl modules:
+ #include <abstractions/ssl_certs>
+ #include <abstractions/ssl_keys>
}
diff --git a/src/modules/m_spanningtree/treeserver.cpp b/src/modules/m_spanningtree/treeserver.cpp
index dfe7edb3d..e56eb4d67 100644
--- a/src/modules/m_spanningtree/treeserver.cpp
+++ b/src/modules/m_spanningtree/treeserver.cpp
@@ -200,6 +200,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 (const auto& server : Children)
diff --git a/src/modules/m_spanningtree/treesocket2.cpp b/src/modules/m_spanningtree/treesocket2.cpp
index de634e231..2075da429 100644
--- a/src/modules/m_spanningtree/treesocket2.cpp
+++ b/src/modules/m_spanningtree/treesocket2.cpp
@@ -410,10 +410,10 @@ 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);
-
- ServerInstance->SNO.WriteGlobalSno('l', "Connection to '\002%s\002' failed.", linkID.c_str());
+ else
+ ServerInstance->SNO.WriteGlobalSno('l', "Connection to '\002%s\002' failed.", linkID.c_str());
time_t server_uptime = ServerInstance->Time() - this->age;
if (server_uptime)