Remove the parting modeNode before making callbacks, so callbacks
don't get confused and think the user is still in the channel.
In ?devoiceall, OpServ should only remove voice from users who have it.
git-archimport-id: srvx@srvx.net--2004-srvx/srvx--devo--1.3--patch-64
# arch-tag: automatic-ChangeLog--srvx@srvx.net--2004-srvx/srvx--devo--1.3
#
# arch-tag: automatic-ChangeLog--srvx@srvx.net--2004-srvx/srvx--devo--1.3
#
+2004-05-21 12:38:39 GMT Michael Poole <mdpoole@troilus.org> patch-64
+
+ Summary:
+ Fix helpserv whine when helpers leave the channel; fix ?devoiceall
+ Revision:
+ srvx--devo--1.3--patch-64
+
+ Remove the parting modeNode before making callbacks, so callbacks
+ don't get confused and think the user is still in the channel.
+
+ In ?devoiceall, OpServ should only remove voice from users who have it.
+
+ modified files:
+ ChangeLog src/hash.c src/opserv.c
+
+
2004-05-17 09:44:35 GMT adam <adam@gamesurge.net> patch-63
Summary:
2004-05-17 09:44:35 GMT adam <adam@gamesurge.net> patch-63
Summary:
- for (n=0; n<pf_used; n++)
- pf_list[n](mNode, reason);
-
/* remove modeNode from channel and user */
modeList_remove(&channel->members, mNode);
modeList_remove(&user->channels, mNode);
/* remove modeNode from channel and user */
modeList_remove(&channel->members, mNode);
modeList_remove(&user->channels, mNode);
+
+ /* make callbacks */
+ for (n=0; n<pf_used; n++)
+ pf_list[n](mNode, reason);
+
+ /* free memory */
free(mNode);
if (!deleting && !channel->members.used && !channel->locks && !(channel->modes & MODE_REGISTERED))
free(mNode);
if (!deleting && !channel->members.used && !channel->locks && !(channel->modes & MODE_REGISTERED))
change = mod_chanmode_alloc(channel->members.used);
for (ii = count = 0; ii < channel->members.used; ++ii) {
struct modeNode *mn = channel->members.list[ii];
change = mod_chanmode_alloc(channel->members.used);
for (ii = count = 0; ii < channel->members.used; ++ii) {
struct modeNode *mn = channel->members.list[ii];
- if (mn->modes & MODE_VOICE)
+ if (!(mn->modes & MODE_VOICE))
continue;
change->args[count].mode = MODE_REMOVE | MODE_VOICE;
change->args[count++].member = mn;
continue;
change->args[count].mode = MODE_REMOVE | MODE_VOICE;
change->args[count++].member = mn;