fixed viscount modification on QUIT events
authorpk910 <philipp@zoelle1.de>
Mon, 27 Aug 2012 03:46:37 +0000 (05:46 +0200)
committerpk910 <philipp@zoelle1.de>
Mon, 27 Aug 2012 03:46:37 +0000 (05:46 +0200)
src/IRCParser.c

index d13c173b7af02949ccc05011ca7623f8dad39184..ebaea306c911b95fdde7dd110b7575e91c6aa5ac 100644 (file)
@@ -412,13 +412,16 @@ static IRC_CMD(raw_quit) {
     struct ChanUser *chanuser, *next_chanuser;
     for(chanuser = getUserChannels(user, NULL); chanuser; chanuser = next_chanuser) {
         next_chanuser = getUserChannels(user, chanuser);
-        chanuser->visCount--;
-        if(chanuser->visCount <= 0 && !(user->flags & USERFLAG_WAS_REGISTERING)) {
-            delChanUser(chanuser, 0); //not free, yet!
-            event_part(chanuser, 1, argv[0]);
-            if((chanuser->chan->flags & CHANFLAG_RECEIVED_USERLIST) && !(chanuser->chan->flags & CHANFLAG_REJOINING))
-                check_full_rejoin(chanuser->chan);
-            freeChanUser(chanuser);
+        //decrease visCount counter only if client is in the channel
+        if(isUserOnChan(client->user, chanuser->chan)) {
+            chanuser->visCount--;
+            if(chanuser->visCount <= 0 && !(user->flags & USERFLAG_WAS_REGISTERING)) {
+                delChanUser(chanuser, 0); //not free, yet!
+                event_part(chanuser, 1, argv[0]);
+                if((chanuser->chan->flags & CHANFLAG_RECEIVED_USERLIST) && !(chanuser->chan->flags & CHANFLAG_REJOINING))
+                    check_full_rejoin(chanuser->chan);
+                freeChanUser(chanuser);
+            }
         }
     }