From 275e8d0c83b1878e83bc9bc48f1a1e1ecb76c80b Mon Sep 17 00:00:00 2001
From: Vakho Tsulaia <vakhtang.tsulaia@cern.ch>
Date: Tue, 3 Nov 2020 22:09:44 +0100
Subject: [PATCH] Minor reorganization of the internal cache of RDBAccessSvc

---
 Database/RDBAccessSvc/src/RDBAccessSvc.cxx | 16 +++++-----------
 Database/RDBAccessSvc/src/RDBAccessSvc.h   |  2 +-
 2 files changed, 6 insertions(+), 12 deletions(-)

diff --git a/Database/RDBAccessSvc/src/RDBAccessSvc.cxx b/Database/RDBAccessSvc/src/RDBAccessSvc.cxx
index 18c2ca9f0ce..4378e13c897 100755
--- a/Database/RDBAccessSvc/src/RDBAccessSvc.cxx
+++ b/Database/RDBAccessSvc/src/RDBAccessSvc.cxx
@@ -53,7 +53,7 @@ bool RDBAccessSvc::connect(const std::string& connName)
     // 3. Recordset by connection
     m_sessions[connName] = 0;
     m_openConnections[connName] = 0;
-    m_recordsetptrs[connName] = new RecordsetPtrMap();
+    m_recordsetptrs.emplace(connName,RecordsetPtrMap());
   }
 
   // Use existing Connection Proxy if available
@@ -166,9 +166,9 @@ IRDBRecordset_ptr RDBAccessSvc::getRecordsetPtr(const std::string& node
     return IRDBRecordset_ptr(new RDBRecordset(this));
   }
 
-  RecordsetPtrMap* recordsets = m_recordsetptrs[connName];
-  RecordsetPtrMap::const_iterator it = recordsets->find(key);
-  if(it != recordsets->end()) {
+  RecordsetPtrMap& recordsets = m_recordsetptrs[connName];
+  RecordsetPtrMap::const_iterator it = recordsets.find(key);
+  if(it != recordsets.end()) {
     ATH_MSG_DEBUG("Reusing existing recordset");
     disconnect(connName);
     return it->second;
@@ -208,7 +208,7 @@ IRDBRecordset_ptr RDBAccessSvc::getRecordsetPtr(const std::string& node
     ATH_MSG_ERROR("Exception caught(...)");
   }
 
-  (*recordsets)[key] = rec;
+  recordsets.emplace(key,rec);
   disconnect(connName);
   return rec;
 }
@@ -501,12 +501,6 @@ StatusCode RDBAccessSvc::initialize()
 
 StatusCode RDBAccessSvc::finalize()
 {
-  // Clean up all remaining recordsets
-  RecordsetPtrsByConn::iterator first_ptr_map = m_recordsetptrs.begin();
-  RecordsetPtrsByConn::iterator last_ptr_map = m_recordsetptrs.end();
-  for(;first_ptr_map!=last_ptr_map;++first_ptr_map) {
-    delete first_ptr_map->second;
-  }
   m_recordsetptrs.clear();
 
   // Clear global tag lookup table
diff --git a/Database/RDBAccessSvc/src/RDBAccessSvc.h b/Database/RDBAccessSvc/src/RDBAccessSvc.h
index 368134440d1..31cea533b75 100755
--- a/Database/RDBAccessSvc/src/RDBAccessSvc.h
+++ b/Database/RDBAccessSvc/src/RDBAccessSvc.h
@@ -38,7 +38,7 @@ template <class TYPE> class SvcFactory;
 typedef std::map<std::string, IRDBRecordset_ptr> RecordsetPtrMap;
 
 // Pointers to recordset maps by connection name
-typedef std::map<std::string, RecordsetPtrMap*> RecordsetPtrsByConn;
+typedef std::map<std::string, RecordsetPtrMap> RecordsetPtrsByConn;
 
 // Session map
 typedef std::map<std::string, coral::ISessionProxy*> SessionMap;
-- 
GitLab