From fdcc7adf0301755ffe06c4d7b774ca21234794e7 Mon Sep 17 00:00:00 2001 From: Jan Steemann Date: Thu, 3 Dec 2015 12:18:13 +0100 Subject: [PATCH] fixed memleak for cluster databases --- arangod/VocBase/server.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/arangod/VocBase/server.cpp b/arangod/VocBase/server.cpp index d38dbe5733..2e78ea5f17 100644 --- a/arangod/VocBase/server.cpp +++ b/arangod/VocBase/server.cpp @@ -798,7 +798,10 @@ static int CloseDroppedDatabases (TRI_server_t* server) { TRI_DestroyVocBase(vocbase); delete vocbase; } - else if (vocbase->_type != TRI_VOCBASE_TYPE_COORDINATOR) { + else if (vocbase->_type == TRI_VOCBASE_TYPE_COORDINATOR) { + delete vocbase; + } + else { LOG_ERROR("unknown database type %d %s - close doing nothing.", vocbase->_type, vocbase->_name); @@ -2072,8 +2075,7 @@ int TRI_CreateCoordinatorDatabaseServer (TRI_server_t* server, decltype(oldLists) newLists = nullptr; try { newLists = new DatabasesLists(*oldLists); - newLists->_coordinatorDatabases.insert( - std::make_pair(std::string(vocbase->_name), vocbase)); + newLists->_coordinatorDatabases.emplace(std::string(vocbase->_name), vocbase); } catch (...) { delete newLists; @@ -2267,7 +2269,7 @@ std::vector TRI_GetIdsCoordinatorDatabaseServer (TRI_server_t* s TRI_ASSERT(vocbase != nullptr); if (! TRI_EqualString(vocbase->_name, TRI_VOC_SYSTEM_DATABASE)) { - v.push_back(vocbase->_id); + v.emplace_back(vocbase->_id); } } } @@ -2296,7 +2298,7 @@ int TRI_DropByIdCoordinatorDatabaseServer (TRI_server_t* server, if (vocbase->_id == id && (force || ! TRI_EqualString(vocbase->_name, TRI_VOC_SYSTEM_DATABASE))) { - newLists->_droppedDatabases.insert(vocbase); + newLists->_droppedDatabases.emplace(vocbase); newLists->_coordinatorDatabases.erase(it); break; }