(svn r22583) -Fix [FS#4640] (r22551): Allocate _changed_storage_arrays on the heap, so the point of destruction is well defined ('never' for now).

This commit is contained in:
frosch 2011-06-13 11:53:00 +00:00
parent 56b7faed52
commit f851a515cc

View File

@ -18,14 +18,14 @@ PersistentStoragePool _persistent_storage_pool("PersistentStorage");
INSTANTIATE_POOL_METHODS(PersistentStorage) INSTANTIATE_POOL_METHODS(PersistentStorage)
/** The changed storage arrays */ /** The changed storage arrays */
static std::set<BaseStorageArray*> _changed_storage_arrays; static std::set<BaseStorageArray*> *_changed_storage_arrays = new std::set<BaseStorageArray*>;
/** /**
* Remove references to use. * Remove references to use.
*/ */
BaseStorageArray::~BaseStorageArray() BaseStorageArray::~BaseStorageArray()
{ {
_changed_storage_arrays.erase(this); _changed_storage_arrays->erase(this);
} }
/** /**
@ -36,7 +36,7 @@ BaseStorageArray::~BaseStorageArray()
*/ */
void AddChangedStorage(BaseStorageArray *storage) void AddChangedStorage(BaseStorageArray *storage)
{ {
_changed_storage_arrays.insert(storage); _changed_storage_arrays->insert(storage);
} }
/** /**
@ -52,10 +52,10 @@ void AddChangedStorage(BaseStorageArray *storage)
void ClearStorageChanges(bool keep_changes) void ClearStorageChanges(bool keep_changes)
{ {
/* Loop over all changes arrays */ /* Loop over all changes arrays */
for (std::set<BaseStorageArray*>::iterator it = _changed_storage_arrays.begin(); it != _changed_storage_arrays.end(); it++) { for (std::set<BaseStorageArray*>::iterator it = _changed_storage_arrays->begin(); it != _changed_storage_arrays->end(); it++) {
(*it)->ClearChanges(keep_changes); (*it)->ClearChanges(keep_changes);
} }
/* And then clear that array */ /* And then clear that array */
_changed_storage_arrays.clear(); _changed_storage_arrays->clear();
} }