diff --git a/src/logging/Manager.cc b/src/logging/Manager.cc index 5966dd87d5..d35a92f2cf 100644 --- a/src/logging/Manager.cc +++ b/src/logging/Manager.cc @@ -311,8 +311,11 @@ bool Manager::CreateStream(EnumVal* id, RecordVal* sval) streams.push_back(nullptr); if ( streams[idx] ) - // We already know this one, delete the previous definition. - delete streams[idx]; + { + // We already know this one. Clean up the old version before making + // a new one. + RemoveStream(idx); + } // Create new stream. streams[idx] = new Stream; @@ -334,7 +337,11 @@ bool Manager::CreateStream(EnumVal* id, RecordVal* sval) bool Manager::RemoveStream(EnumVal* id) { unsigned int idx = id->AsEnum(); + return RemoveStream(idx); + } +bool Manager::RemoveStream(unsigned int idx) + { if ( idx >= streams.size() || ! streams[idx] ) return false; diff --git a/src/logging/Manager.h b/src/logging/Manager.h index 81526b8a9e..cd194fc797 100644 --- a/src/logging/Manager.h +++ b/src/logging/Manager.h @@ -299,6 +299,8 @@ private: bool CompareFields(const Filter* filter, const WriterFrontend* writer); bool CheckFilterWriterConflict(const WriterInfo* winfo, const Filter* filter); + bool RemoveStream(unsigned int idx); + std::vector streams; // Indexed by stream enum. int rotations_pending; // Number of rotations not yet finished. FuncPtr rotation_format_func;