summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/channels.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/channels.c b/src/channels.c
index c5e35a473..60deace17 100644
--- a/src/channels.c
+++ b/src/channels.c
@@ -378,11 +378,21 @@ void Channel::SetModeInternal(ChannelMode *cm, const std::string &param, bool En
ci->SetFlag(CI_PERSIST);
}
- /* Check for mlock */
+ /* Check if we should enforce mlock */
+ if (!EnforceMLock || MOD_RESULT == EVENT_STOP)
+ return;
- /* Non registered channel, no mlock */
- if (!ci || !EnforceMLock || MOD_RESULT == EVENT_STOP)
+ /* Non registered channels can not be +r */
+ if (!ci && HasMode(CMODE_REGISTERED))
+ {
+ RemoveMode(NULL, CMODE_REGISTERED);
+ }
+
+ /* Non registered channel has no mlock */
+ if (!ci)
+ {
return;
+ }
/* If this channel has this mode locked negative */
if (ci->HasMLock(cm->Name, false))