diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2007-04-15 22:18:01 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2007-04-15 22:18:01 +0000 |
commit | 9af6ca54c00f2c82782e14b5b222514c5b4b25c1 (patch) | |
tree | af86504ec11256ee743098dd36a6d0e69d5b40a1 /src/modules/m_hostchange.cpp | |
parent | b98126b5440b8979d9b2215685c47740026ce29f (diff) |
Fix for bug that took ages to track down and was very subtle.
During authentication the flow of commands is as follows:
> SERVER aaaaaa
< SERVER bbbbbb
> BURST
< BURST
... what can happen is that between the two server commands we can introduce SERVER aaaa to server bbbbb again, from a different socket. As server aaaaa doesnt exist yet and we're waiting for it to say
yes or no to our own SERVER command over at bbbbbb, it cant be found with FindServer.
Therefore we need a second list of servers that arent yet authenticated, but are waiting TO authenticate, by the pointer their socket has and the name they want to become after auth.
If two servers introduce themselves at the same time, triggering what was the race condition, both servers are disconnected with "ERROR :Negotiation collision" and must try again until only one succeeds.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@6802 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/modules/m_hostchange.cpp')
0 files changed, 0 insertions, 0 deletions