summaryrefslogtreecommitdiff
path: root/include/serialize.h
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2011-10-10 15:04:23 -0400
committerAdam <Adam@anope.org>2011-10-10 15:04:23 -0400
commit80f4f317b247ee3756fbc001495310b2f7c4e997 (patch)
tree3fd6abe3dbabe221e08999462b2b52c0687ec9fe /include/serialize.h
parent9f3d735d9d461e0cea042722ac1c6af98fe6560e (diff)
Put serialized_items on the heap to prevent weird crashes on shutdown from the list being destructed before members in it
Diffstat (limited to 'include/serialize.h')
-rw-r--r--include/serialize.h20
1 files changed, 8 insertions, 12 deletions
diff --git a/include/serialize.h b/include/serialize.h
index e4c6bce1f..ff818a61b 100644
--- a/include/serialize.h
+++ b/include/serialize.h
@@ -60,7 +60,7 @@ namespace Serialize
class SerializableBase;
extern std::vector<SerializableBase *> serialized_types;
-extern std::list<SerializableBase *> serialized_items;
+extern std::list<SerializableBase *> *serialized_items;
extern void RegisterTypes();
class SerializableBase
@@ -85,11 +85,6 @@ template<typename Type> class Serializable : public SerializableBase
{
}
- ~SerializableAllocator()
- {
- Unregister();
- }
-
void Register(const Anope::string &n, int pos = -1)
{
this->name = n;
@@ -127,20 +122,21 @@ template<typename Type> class Serializable : public SerializableBase
protected:
Serializable()
{
- serialized_items.push_front(this);
- this->s_iter = serialized_items.begin();
+ if (serialized_items == NULL)
+ serialized_items = new std::list<SerializableBase *>();
+ serialized_items->push_front(this);
+ this->s_iter = serialized_items->begin();
}
Serializable(const Serializable &)
{
- serialized_items.push_front(this);
- this->s_iter = serialized_items.begin();
+ serialized_items->push_front(this);
+ this->s_iter = serialized_items->begin();
}
~Serializable()
{
- if (!serialized_items.empty())
- serialized_items.erase(this->s_iter);
+ serialized_items->erase(this->s_iter);
}
public: