From b3576b29db8fb7788277d3f3eef170e5cd5eec4d Mon Sep 17 00:00:00 2001 From: Bram Matthys Date: Thu, 29 May 2003 19:23:12 +0000 Subject: [PATCH] - Removed "Duplicate user entry in SJOIN" notice because the problem has been traced down. --- Changes | 1 + src/channel.c | 22 +++++++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/Changes b/Changes index bd54b1475..4bb4f6392 100644 --- a/Changes +++ b/Changes @@ -2197,3 +2197,4 @@ seen. gmtime warning still there - IPv6: UnrealIRCd can now lookup ip6.arpa addresses too (original IRCnet patch modified for UnrealIRCd by Onliner). - Doc updates +- Removed "Duplicate user entry in SJOIN" notice because the problem has been traced down. diff --git a/src/channel.c b/src/channel.c index 134f06c6e..d6f594996 100644 --- a/src/channel.c +++ b/src/channel.c @@ -4838,9 +4838,16 @@ CMD_FUNC(m_sjoin) { modeflags = 0; } -#if 1 - /* temporarely added for tracing user-twice-in-channel bugs -- Syzop, 2003-01-24 */ + /* [old: temporarely added for tracing user-twice-in-channel bugs -- Syzop, 2003-01-24.] + * 2003-05-29: now traced this bug down: it's possible to get 2 joins if persons + * at 2 different servers kick a target on a 3rd server. This will require >3 servers + * most of the time but is also possible with only 3 if there's asynchronic lag. + * The general rule here (and at other places as well! see kick etc) is we ignore it + * locally (dont send a join to the chan) but propagate it to the other servers. + * I'm not sure if the propagation is needed however -- Syzop. + */ if (IsMember(acptr, chptr)) { +#if 0 int i; sendto_realops("[BUG] Duplicate user entry in SJOIN! Please report at http://bugs.unrealircd.org !!! Chan='%s', User='%s', modeflags=%ld", chptr->chname ? chptr->chname : "", acptr->name ? acptr->name : "", modeflags); @@ -4850,12 +4857,13 @@ CMD_FUNC(m_sjoin) for (i=0; i < parc; i++) ircd_log(LOG_ERROR, "parv[%d] = '%s'", i, BadPtr(parv[i]) ? "" : parv[i]); ircd_log(LOG_ERROR, "--- End of dump ---"); - } else #endif - add_user_to_channel(chptr, acptr, modeflags); - sendto_channel_butserv(chptr, acptr, - ":%s JOIN :%s", nick, - chptr->chname); + } else { + add_user_to_channel(chptr, acptr, modeflags); + sendto_channel_butserv(chptr, acptr, + ":%s JOIN :%s", nick, + chptr->chname); + } sendto_serv_butone_sjoin(cptr, ":%s JOIN %s", nick, chptr->chname); CheckStatus('q', CHFL_CHANOWNER);