]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/users.cpp
Remove a load of unneeded debugging output
[user/henk/code/inspircd.git] / src / users.cpp
index fbbe0a25fa38842d8e1b3d70440e4ae75e0b2759..e67ad7cecce5ea65190a2ac5a06566652441e085 100644 (file)
@@ -438,6 +438,18 @@ void kill_link(userrec *user,const char* r)
 {
         user_hash::iterator iter = clientlist.find(user->nick);
 
+
+/*
+ * 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];
 
         strlcpy(reason,r,MAXQUIT-1);
@@ -452,7 +464,8 @@ void kill_link(userrec *user,const char* r)
                 WriteCommonExcept(user,"QUIT :%s",reason);
         }
 
-        user->FlushWriteBuf();
+       if (IS_LOCAL(user))
+               user->FlushWriteBuf();
 
         FOREACH_MOD(I_OnUserDisconnect,OnUserDisconnect(user));
 
@@ -495,8 +508,8 @@ void kill_link(userrec *user,const char* r)
                        }
                }
                 clientlist.erase(iter);
+               delete user;
         }
-        delete user;
 }
 
 WhoWasGroup::WhoWasGroup(userrec* user) : host(NULL), dhost(NULL), ident(NULL), server(NULL), gecos(NULL), signon(user->signon)