fixed cache asyncs caused by users rejoining the channel to fast
[NeonServV5.git] / src / IRCParser.c
index bf7755142b7f9f7049a4a77fba4ce41b950dc7dd..fc6b607cbf2e98c8ce3bba734090cf4eec9dcf31 100644 (file)
@@ -404,11 +404,24 @@ static IRC_CMD(raw_part) {
         decrease_viscount_butone(chan, chanuser);
         chan->botcount--;
     }
+    if(chanuser->flags & CHANUSERFLAG_PARTING)
+        chanuser->old_visCount--;
     chanuser->visCount--;
     if(chanuser->visCount == 0) {
         delChanUser(chanuser, 0); //not free, yet!
         event_part(chanuser, 0, (argc > 1 ? argv[1] : NULL));
         freeChanUser(chanuser);
+    } else if(!(chanuser->flags & CHANUSERFLAG_PARTING)) {
+        chanuser->flags |= CHANUSERFLAG_PARTING;
+        chanuser->old_visCount = chanuser->visCount;
+    } else if(chanuser->old_visCount == 0) {
+        int visCount = chanuser->visCount;
+        delChanUser(chanuser, 0); //not free, yet!
+        event_part(chanuser, 0, (argc > 1 ? argv[1] : NULL));
+        freeChanUser(chanuser);
+        chanuser = addChanUser(chan, user);
+        chanuser->visCount = visCount;
+        event_join(chanuser);
     }
     
     //check if channel is still present