From cf42f5dbc8166ca15df4f0ad40728c10a53b9cad Mon Sep 17 00:00:00 2001 From: jsteemann Date: Tue, 30 Aug 2016 13:02:04 +0200 Subject: [PATCH] fix leaks --- arangod/VocBase/vocbase.cpp | 11 +++++++++-- arangod/VocBase/vocbase.h | 1 - 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/arangod/VocBase/vocbase.cpp b/arangod/VocBase/vocbase.cpp index 82d796e401..abb745d1c9 100644 --- a/arangod/VocBase/vocbase.cpp +++ b/arangod/VocBase/vocbase.cpp @@ -122,10 +122,10 @@ arangodb::LogicalCollection* TRI_vocbase_t::registerCollection( _collectionsById.erase(cid); throw; } + + collection->setStatus(TRI_VOC_COL_STATUS_UNLOADED); } - collection->setStatus(TRI_VOC_COL_STATUS_UNLOADED); - return collection.release(); } @@ -630,11 +630,13 @@ void TRI_vocbase_t::shutdown() { for (auto& collection : _deadCollections) { delete collection; } + _deadCollections.clear(); // free collections for (auto& collection : _collections) { delete collection; } + _collections.clear(); } /// @brief returns names of all known (document) collections @@ -1140,6 +1142,11 @@ TRI_vocbase_t::~TRI_vocbase_t() { StorageEngine* engine = EngineSelectorFeature::ENGINE; engine->shutdownDatabase(this); + + // do a final cleanup of collections + for (auto& it : _collections) { + delete it; + } } std::string TRI_vocbase_t::path() const { diff --git a/arangod/VocBase/vocbase.h b/arangod/VocBase/vocbase.h index fc9086bcda..2579a4e6a6 100644 --- a/arangod/VocBase/vocbase.h +++ b/arangod/VocBase/vocbase.h @@ -37,7 +37,6 @@ #include "velocypack/Builder.h" #include "velocypack/velocypack-aliases.h" -struct TRI_collection_t; class TRI_replication_applier_t; namespace arangodb {