diff --git a/Control/StoreGate/StoreGate/tools/SGImplSvc.h b/Control/StoreGate/StoreGate/tools/SGImplSvc.h index f00d41797082e6157a781726f7c0fbac44f82bba..2a865512dcfae7fa0644515127f5740d2ee020fe 100644 --- a/Control/StoreGate/StoreGate/tools/SGImplSvc.h +++ b/Control/StoreGate/StoreGate/tools/SGImplSvc.h @@ -1106,6 +1106,7 @@ private: typedef std::recursive_mutex mutex_t; typedef std::lock_guard<mutex_t> lock_t; mutable mutex_t m_mutex; + mutable mutex_t m_remapMutex; public: diff --git a/Control/StoreGate/src/SGImplSvc.cxx b/Control/StoreGate/src/SGImplSvc.cxx index 3f52b05705cb4d91319aba4ebf932f65115d359c..c65c8f1554d776daca90c66b2c43be7e0e8aacd2 100644 --- a/Control/StoreGate/src/SGImplSvc.cxx +++ b/Control/StoreGate/src/SGImplSvc.cxx @@ -332,19 +332,24 @@ string SGImplSvc::createKey(const CLID& id) // clear store StatusCode SGImplSvc::clearStore(bool forceRemove) { - lock_t lock (m_mutex); - emptyTrash(); - for (auto& p : m_newBoundHandles) - p.second.clear(); - assert(m_pStore); - MsgStream* pmlog( msgLvl(MSG::VERBOSE) ? &msg() : 0); - msg() << MSG::DEBUG << "Clearing store with forceRemove=" - << forceRemove << endmsg; - bool hard_reset = (m_numSlots > 1); - m_pStore->clearStore(forceRemove, hard_reset, pmlog); - m_storeLoaded=false; //FIXME hack needed by loadEventProxies - m_remap_impl->m_remaps.clear(); - m_arena.reset(); + { + lock_t lock (m_mutex); + emptyTrash(); + for (auto& p : m_newBoundHandles) + p.second.clear(); + assert(m_pStore); + MsgStream* pmlog( msgLvl(MSG::VERBOSE) ? &msg() : 0); + msg() << MSG::DEBUG << "Clearing store with forceRemove=" + << forceRemove << endmsg; + bool hard_reset = (m_numSlots > 1); + m_pStore->clearStore(forceRemove, hard_reset, pmlog); + m_storeLoaded=false; //FIXME hack needed by loadEventProxies + } + { + lock_t remap_lock (m_remapMutex); + m_remap_impl->m_remaps.clear(); + m_arena.reset(); + } return StatusCode::SUCCESS; } @@ -1412,7 +1417,7 @@ void SGImplSvc::remap_impl (sgkey_t source, sgkey_t target, off_t index_offset) { - lock_t lock (m_mutex); + lock_t lock (m_remapMutex); SG::RemapImpl::remap_t payload; payload.target = target; payload.index_offset = index_offset; @@ -1431,7 +1436,7 @@ void SGImplSvc::remap_impl (sgkey_t source, bool SGImplSvc::tryELRemap (sgkey_t sgkey_in, size_t index_in, sgkey_t& sgkey_out, size_t& index_out) { - lock_t lock (m_mutex); + lock_t lock (m_remapMutex); SG::RemapImpl::remap_map_t::iterator i = m_remap_impl->m_remaps.find (sgkey_in); if (i == m_remap_impl->m_remaps.end())