summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorattilamolnar <attilamolnar@hush.com>2012-11-29 15:31:08 +0100
committerattilamolnar <attilamolnar@hush.com>2012-11-29 16:25:36 +0100
commitb4034e2231afcfcb5cf29156288c666d90831fed (patch)
tree255570e4185622e07b39a292821b59e44d8092a7
parent53f027a290ff03b74109c77e6bfb85892e787343 (diff)
cmd_rehash, m_spanningtree Fix REHASH messages duplicating at each hop
Fixes #375 reported by @JDowny
-rw-r--r--src/commands/cmd_rehash.cpp7
-rw-r--r--src/modules/m_spanningtree/main.cpp3
2 files changed, 6 insertions, 4 deletions
diff --git a/src/commands/cmd_rehash.cpp b/src/commands/cmd_rehash.cpp
index 1fa6e5731..abf0b7876 100644
--- a/src/commands/cmd_rehash.cpp
+++ b/src/commands/cmd_rehash.cpp
@@ -94,8 +94,6 @@ CmdResult CommandRehash::Handle (const std::vector<std::string>& parameters, Use
ServerInstance->ConfigThread = new ConfigReaderThread(user->uuid);
ServerInstance->Threads->Start(ServerInstance->ConfigThread);
-
- return CMD_SUCCESS;
}
else
{
@@ -107,9 +105,10 @@ CmdResult CommandRehash::Handle (const std::vector<std::string>& parameters, Use
user->WriteServ("NOTICE %s :*** Could not rehash: A rehash is already in progress.", user->nick.c_str());
else
ServerInstance->PI->SendUserNotice(user, "*** Could not rehash: A rehash is already in progress.");
-
- return CMD_FAILURE;
}
+
+ // Always return success so spanningtree forwards an incoming REHASH even if we failed
+ return CMD_SUCCESS;
}
diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp
index b8540cf27..ffc466a82 100644
--- a/src/modules/m_spanningtree/main.cpp
+++ b/src/modules/m_spanningtree/main.cpp
@@ -754,6 +754,9 @@ void ModuleSpanningTree::OnRemoteKill(User* source, User* dest, const std::strin
void ModuleSpanningTree::OnPreRehash(User* user, const std::string &parameter)
{
+ if (loopCall)
+ return; // Don't generate a REHASH here if we're in the middle of processing a message that generated this one
+
ServerInstance->Logs->Log("remoterehash", DEBUG, "called with param %s", parameter.c_str());
// Send out to other servers