diff options
author | Attila Molnar <attilamolnar@hush.com> | 2014-07-28 14:50:28 +0200 |
---|---|---|
committer | Attila Molnar <attilamolnar@hush.com> | 2014-07-28 14:50:28 +0200 |
commit | 662364f8551b3db2a3cbc0000f2d3eec091d8e07 (patch) | |
tree | df695d96c895b245b867d0c75676394b7a428b20 /src | |
parent | d572f1a67dbe8979f616cd2451b11a422cce0ade (diff) |
Allow fast sid reuse by erasing fake users from UserManager::uuidlist when the netsplit is handled, not in cull()
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/m_spanningtree/treeserver.cpp | 4 | ||||
-rw-r--r-- | src/users.cpp | 2 |
2 files changed, 5 insertions, 1 deletions
diff --git a/src/modules/m_spanningtree/treeserver.cpp b/src/modules/m_spanningtree/treeserver.cpp index 9b92ba988..009478635 100644 --- a/src/modules/m_spanningtree/treeserver.cpp +++ b/src/modules/m_spanningtree/treeserver.cpp @@ -358,6 +358,10 @@ TreeServer::~TreeServer() void TreeServer::RemoveHash() { + // XXX: Erase server from UserManager::uuidlist now, to allow sid reuse in the current main loop + // iteration, before the cull list is applied + ServerInstance->Users->uuidlist.erase(sid); + Utils->sidlist.erase(sid); Utils->serverlist.erase(GetName()); } diff --git a/src/users.cpp b/src/users.cpp index 8d22d166c..aed969c7b 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -340,7 +340,7 @@ CullResult FakeUser::cull() // Fake users don't quit, they just get culled. quitting = true; // Fake users are not inserted into UserManager::clientlist, they're only in the uuidlist - ServerInstance->Users->uuidlist.erase(uuid); + // and they are removed from there by the linking mod when the server splits return User::cull(); } |