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 | |
parent | 21e1913c0f1a2f4818e4c704548a08748f28f146 (diff) |
Remove memos from memoinfo more reliably
-rw-r--r-- | include/memo.h | 1 | ||||
-rw-r--r-- | modules/database/db_old.cpp | 2 | ||||
-rw-r--r-- | modules/pseudoclients/memoserv.cpp | 1 | ||||
-rw-r--r-- | src/memos.cpp | 15 |
4 files changed, 16 insertions, 3 deletions
diff --git a/include/memo.h b/include/memo.h index 344ce6bf6..5d92b6566 100644 --- a/include/memo.h +++ b/include/memo.h @@ -18,6 +18,7 @@ class CoreExport Memo : public Serializable { public: + MemoInfo *mi; bool unread; bool receipt; Memo(); diff --git a/modules/database/db_old.cpp b/modules/database/db_old.cpp index b864d2d32..00524fdc3 100644 --- a/modules/database/db_old.cpp +++ b/modules/database/db_old.cpp @@ -590,6 +590,7 @@ static void LoadNicks() READ(read_string(m->text, f)); m->owner = nc->display; nc->memos.memos->push_back(m); + m->mi = &nc->memos; } READ(read_uint16(&u16, f)); READ(read_int16(&i16, f)); @@ -956,6 +957,7 @@ static void LoadChannels() READ(read_string(m->text, f)); m->owner = ci->name; ci->memos.memos->push_back(m); + m->mi = &ci->memos; } READ(read_string(buffer, f)); diff --git a/modules/pseudoclients/memoserv.cpp b/modules/pseudoclients/memoserv.cpp index de50c6499..37e9545aa 100644 --- a/modules/pseudoclients/memoserv.cpp +++ b/modules/pseudoclients/memoserv.cpp @@ -67,6 +67,7 @@ class MemoServCore : public Module, public MemoServService sender->lastmemosend = Anope::CurTime; Memo *m = new Memo(); + m->mi = mi; mi->memos->push_back(m); m->owner = target; m->sender = source; 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) |