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);
+ }
}
}