diff options
author | Adam <Adam@anope.org> | 2011-10-10 15:04:23 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2011-10-10 15:04:23 -0400 |
commit | 80f4f317b247ee3756fbc001495310b2f7c4e997 (patch) | |
tree | 3fd6abe3dbabe221e08999462b2b52c0687ec9fe /include/serialize.h | |
parent | 9f3d735d9d461e0cea042722ac1c6af98fe6560e (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.h | 20 |
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: |