diff options
author | Adam <Adam@anope.org> | 2016-04-14 20:15:53 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2016-04-14 20:15:53 -0400 |
commit | a941f9bde0c5ed766f7c308c45a2396177f1bc1d (patch) | |
tree | 038fd7e061a8ec3ff9ee92860ad97745cf9242b3 /src/memos.cpp | |
parent | 21e1913c0f1a2f4818e4c704548a08748f28f146 (diff) |
Remove memos from memoinfo more reliably
Diffstat (limited to 'src/memos.cpp')
-rw-r--r-- | src/memos.cpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/memos.cpp b/src/memos.cpp index 0f591757b..bf8f0eb73 100644 --- a/src/memos.cpp +++ b/src/memos.cpp @@ -19,13 +19,12 @@ Memo::Memo() : Serializable("Memo") { + mi = NULL; unread = receipt = false; } Memo::~Memo() { - bool ischan; - MemoInfo *mi = MemoInfo::GetMemoInfo(this->owner, ischan); if (mi) { std::vector<Memo *>::iterator it = std::find(mi->memos->begin(), mi->memos->end(), this); @@ -60,7 +59,10 @@ Serializable* Memo::Unserialize(Serializable *obj, Serialize::Data &data) if (obj) m = anope_dynamic_static_cast<Memo *>(obj); else + { m = new Memo(); + m->mi = mi; + } m->owner = owner; data["time"] >> m->time; @@ -99,7 +101,14 @@ void MemoInfo::Del(unsigned index) { if (index >= this->memos->size()) return; - delete this->GetMemo(index); + + Memo *m = this->GetMemo(index); + + std::vector<Memo *>::iterator it = std::find(memos->begin(), memos->end(), m); + if (it != memos->end()) + memos->erase(it); + + delete m; } bool MemoInfo::HasIgnore(User *u) |