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 /modules | |
| 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 'modules')
| -rw-r--r-- | modules/database/db_flatfile.cpp | 21 | ||||
| -rw-r--r-- | modules/database/db_sql.cpp | 5 |
2 files changed, 15 insertions, 11 deletions
diff --git a/modules/database/db_flatfile.cpp b/modules/database/db_flatfile.cpp index f17ed6fd1..b913b8529 100644 --- a/modules/database/db_flatfile.cpp +++ b/modules/database/db_flatfile.cpp @@ -158,16 +158,17 @@ class DBFlatFile : public Module return EVENT_CONTINUE; } - for (std::list<SerializableBase *>::iterator it = serialized_items.begin(), it_end = serialized_items.end(); it != it_end; ++it) - { - SerializableBase *base = *it; - SerializableBase::serialized_data data = base->serialize(); - - db << "OBJECT " << base->serialize_name() << "\n"; - for (SerializableBase::serialized_data::iterator dit = data.begin(), dit_end = data.end(); dit != dit_end; ++dit) - db << "DATA " << dit->first << " " << dit->second.astr() << "\n"; - db << "END\n"; - } + if (serialized_items != NULL) + for (std::list<SerializableBase *>::iterator it = serialized_items->begin(), it_end = serialized_items->end(); it != it_end; ++it) + { + SerializableBase *base = *it; + SerializableBase::serialized_data data = base->serialize(); + + db << "OBJECT " << base->serialize_name() << "\n"; + for (SerializableBase::serialized_data::iterator dit = data.begin(), dit_end = data.end(); dit != dit_end; ++dit) + db << "DATA " << dit->first << " " << dit->second.astr() << "\n"; + db << "END\n"; + } db.close(); diff --git a/modules/database/db_sql.cpp b/modules/database/db_sql.cpp index 43e7cfe6d..d411d8b6d 100644 --- a/modules/database/db_sql.cpp +++ b/modules/database/db_sql.cpp @@ -113,8 +113,11 @@ class DBSQL : public Module return EVENT_CONTINUE; } + if (serialized_items == NULL) + return EVENT_CONTINUE; + std::map<Anope::string, SerializableBase::serialized_data> table_layout; - for (std::list<SerializableBase *>::iterator it = serialized_items.begin(), it_end = serialized_items.end(); it != it_end; ++it) + for (std::list<SerializableBase *>::iterator it = serialized_items->begin(), it_end = serialized_items->end(); it != it_end; ++it) { SerializableBase *base = *it; SerializableBase::serialized_data data = base->serialize(); |
