Gavin Grieve
diff -r -u ircu2.10/ChangeLog ircu2.10.12/ChangeLog
--- ircu2.10/ChangeLog 2003-08-14 03:01:44.000000000 +1200
+++ ircu2.10.12/ChangeLog 2004-01-21 13:44:06.000000000 +1300
@@ -1,3 +1,17 @@
+2004-01-21 Gavin Grieve <[EMAIL PROTECTED]>
+
+ * ircd/channel.c, include/channel.h: bring forward the IsUserParting()
+ code to resolve the multiple part messages bug written by Entrope.
+
2003-08-12 Timothy Vogelsang <[EMAIL PROTECTED]>
* ircd/match.c: (match) rewrote function based on existing
diff -r -u ircu2.10/include/channel.h ircu2.10.12/include/channel.h
--- ircu2.10/include/channel.h 2003-08-12 21:41:16.000000000 +1200
+++ ircu2.10.12/include/channel.h 2004-01-21 13:05:22.000000000 +1300
@@ -70,6 +70,7 @@
#define CHFL_BURST_ALREADY_OPPED 0x04000 /* In oob BURST, but was already
joined and opped */
#define CHFL_BURST_ALREADY_VOICED 0x08000 /* In oob BURST, but was already
joined and voiced */
#define CHFL_CHANNEL_MANAGER 0x10000 /* Set when creating channel or using Apass */
+#define CHFL_USER_PARTING 0x20000 /* User is already parting that channel */
#define CHFL_OVERLAP (CHFL_CHANOP | CHFL_VOICE)
#define CHFL_BANVALIDMASK (CHFL_BANVALID | CHFL_BANNED)
@@ -191,6 +192,7 @@
#define IsBurstJoined(x) ((x)->status & CHFL_BURST_JOINED)
#define IsVoicedOrOpped(x) ((x)->status & CHFL_VOICED_OR_OPPED)
#define IsChannelManager(x) ((x)->status & CHFL_CHANNEL_MANAGER)
+#define IsUserParting(x) ((x)->status & CHFL_USER_PARTING)
#define SetBanned(x) ((x)->status |= CHFL_BANNED)
#define SetBanValid(x) ((x)->status |= CHFL_BANVALID)
@@ -200,6 +202,7 @@
#define SetZombie(x) ((x)->status |= CHFL_ZOMBIE)
#define SetChannelManager(x) ((x)->status |= CHFL_CHANNEL_MANAGER)
#define SetOpLevel(x, v) (void)((x)->oplevel = (v))
+#define SetUserParting(x) ((x)->status |= CHFL_USER_PARTING)
#define ClearBanned(x) ((x)->status &= ~CHFL_BANNED)
#define ClearBanValid(x) ((x)->status &= ~CHFL_BANVALID)
diff -r -u ircu2.10/ircd/channel.c ircu2.10.12/ircd/channel.c
--- ircu2.10/ircd/channel.c 2003-08-12 21:41:16.000000000 +1200
+++ ircu2.10.12/ircd/channel.c 2004-01-21 13:08:24.000000000 +1300
@@ -3139,6 +3139,11 @@
if (jbuf->jb_type == JOINBUF_TYPE_PART ||
jbuf->jb_type == JOINBUF_TYPE_PARTALL) {
+ struct Membership *member = find_member_link(chan, jbuf->jb_source);
+ if (IsUserParting(member))
+ return;
+ SetUserParting(member);
+
/* Send notification to channel */
if (!(flags & CHFL_ZOMBIE))
sendcmdto_channel_butserv_butone(jbuf->jb_source, CMD_PART, chan, NULL,
