summaryrefslogtreecommitdiff
path: root/src/regchannel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/regchannel.cpp')
-rw-r--r--src/regchannel.cpp17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/regchannel.cpp b/src/regchannel.cpp
index 17c141ea7..7ff3e753a 100644
--- a/src/regchannel.cpp
+++ b/src/regchannel.cpp
@@ -563,10 +563,19 @@ void ChannelInfo::LoadMLock()
if (this->HasFlag(CI_PERSIST) && !this->c)
{
this->c = new Channel(this->name, this->time_registered);
- if (!this->bi && ChanServ && ModeManager::FindChannelModeByName(CMODE_PERM) == NULL)
- ChanServ->Assign(NULL, this);
- else if (this->bi)
- this->bi->Join(c);
+ if (ModeManager::FindChannelModeByName(CMODE_PERM) != NULL)
+ {
+ /* At this point, CMODE_PERM *must* be locked on the channel, so this is fine */
+ ircdproto->SendChannel(this->c, get_mlock_modes(this, true));
+ }
+ else
+ {
+ if (!this->bi)
+ whosends(this)->Assign(NULL, this);
+ if (this->c->FindUser(this->bi) == NULL)
+ this->bi->Join(this->c);
+ }
+
check_modes(this->c);
this->CheckTopic();
}