diff options
author | w00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-03-25 21:52:45 +0000 |
---|---|---|
committer | w00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-03-25 21:52:45 +0000 |
commit | 272d4011eacf839074f6598b0e12bb0db942f377 (patch) | |
tree | 73fc848617ca6c0b156de88b8ca69350eff73226 | |
parent | a4e29fc330705b1aa738ea6681c4d9f901a87a1d (diff) |
Possible fix for a desync condition
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3753 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r-- | src/users.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/users.cpp b/src/users.cpp index 0620a9e0c..ccf754736 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -437,8 +437,18 @@ void DeleteOper(userrec* user) void kill_link(userrec *user,const char* r) { user_hash::iterator iter = clientlist.find(user->nick); - if (iter == clientlist.end()) - return; + + +/* + * I'm pretty sure returning here is causing a desync when part of the net thinks a user is gone, + * and another part doesn't. We want to broadcast the quit/kill before bailing so the net stays in sync. + * + * I can't imagine this blowing up, so I'm commenting it out. We still check + * before playing with a bad iterator below in our if(). DISCUSS THIS BEFORE YOU DO ANYTHING. --w00t + * + * if (iter == clientlist.end()) + * return; + */ char reason[MAXBUF]; |