From 117b68a47fd9637d71229f943f9e3bf3b14c26d3 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 19 Mar 2016 16:21:40 -0400 Subject: Also defer channel deletion when processing sjoins (cherry picked from commit 79e7c3f98a57b7cffc46d9a7dc250a0e6e25fc98) --- src/channels.cpp | 9 +++++++-- src/messages.cpp | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/channels.cpp b/src/channels.cpp index 3072e1fac..98ecfe127 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -169,8 +169,7 @@ void Channel::DeleteUser(User *user) Log(LOG_DEBUG) << "Channel::DeleteUser() tried to delete non-existent channel " << this->name << " from " << user->nick << "'s channel list"; delete cu; - if (std::find(deleting.begin(), deleting.end(), this) == deleting.end()) - deleting.push_back(this); + QueueForDeletion(); } ChanUserContainer *Channel::FindUser(User *u) const @@ -925,6 +924,12 @@ Channel *Channel::FindOrCreate(const Anope::string &name, bool &created, time_t return chan; } +void Channel::QueueForDeletion() +{ + if (std::find(deleting.begin(), deleting.end(), this) == deleting.end()) + deleting.push_back(this); +} + void Channel::DeleteChannels() { for (unsigned int i = 0; i < deleting.size(); ++i) diff --git a/src/messages.cpp b/src/messages.cpp index 89ae65932..c778de383 100644 --- a/src/messages.cpp +++ b/src/messages.cpp @@ -174,7 +174,7 @@ void Join::SJoin(MessageSource &source, const Anope::string &chan, time_t ts, co c->Sync(); if (c->CheckDelete()) - delete c; + c->QueueForDeletion(); } } } -- cgit