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