From c48e1031573353fc58b16a983ce061ed0e67e183 Mon Sep 17 00:00:00 2001
From: abarton <Adam.Edward.Barton@cern.ch>
Date: Sat, 13 Jun 2020 00:00:56 +0100
Subject: [PATCH] fix bug in InternalOfflineFast

---
 Event/EventContainers/src/InternalOfflineFast.cxx | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/Event/EventContainers/src/InternalOfflineFast.cxx b/Event/EventContainers/src/InternalOfflineFast.cxx
index 71d6bb7d230..118d7c1df88 100644
--- a/Event/EventContainers/src/InternalOfflineFast.cxx
+++ b/Event/EventContainers/src/InternalOfflineFast.cxx
@@ -27,7 +27,8 @@ void InternalOfflineFast::wait() const {
    for(size_t i=0 ;i < m_fullMap.size(); ++i){
     if(m_fullMap[i]) m_map.emplace_back(i, m_fullMap[i]);
    }
-   m_needsupdate.store(true);
+   m_map.shrink_to_fit();
+   m_needsupdate.store(false);
 }
 
 std::vector<IdentifierHash> InternalOfflineFast::getAllCurrentHashes() const {
@@ -70,7 +71,15 @@ size_t InternalOfflineFast::numberOfCollections() const {
 }
 
 void InternalOfflineFast::cleanUp(deleter_f* deleter) noexcept {
-    for(const auto& x : m_map) { deleter(x.second); m_fullMap[x.first] = nullptr; }
+    if(!m_needsupdate) {
+        for(const auto& x : m_map) { deleter(x.second); m_fullMap[x.first] = nullptr; }
+        if(!m_map.empty()) m_needsupdate.store(true, std::memory_order_relaxed);
+    }
+    else {
+      for(size_t i=0 ;i < m_fullMap.size(); ++i){
+         if(m_fullMap[i]) deleter(m_fullMap[i]);
+      }
+    }
     m_map.clear();
 }
 
-- 
GitLab