diff options
-rw-r--r-- | src/channels.c | 16 |
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 ¶m, 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)) |