summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2016-04-14 20:15:53 -0400
committerAdam <Adam@anope.org>2016-04-14 20:15:53 -0400
commita941f9bde0c5ed766f7c308c45a2396177f1bc1d (patch)
tree038fd7e061a8ec3ff9ee92860ad97745cf9242b3
parent21e1913c0f1a2f4818e4c704548a08748f28f146 (diff)
Remove memos from memoinfo more reliably
-rw-r--r--include/memo.h1
-rw-r--r--modules/database/db_old.cpp2
-rw-r--r--modules/pseudoclients/memoserv.cpp1
-rw-r--r--src/memos.cpp15
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)