diff --git a/Database/AthenaPOOL/PoolSvc/src/PoolSvc.cxx b/Database/AthenaPOOL/PoolSvc/src/PoolSvc.cxx index 0166e957d7dbd96a7251ffe1c3bebc01dd0efedc..b4224da7d7b603777572e2651fd932fa31fcade4 100644 --- a/Database/AthenaPOOL/PoolSvc/src/PoolSvc.cxx +++ b/Database/AthenaPOOL/PoolSvc/src/PoolSvc.cxx @@ -444,14 +444,17 @@ pool::ICollection* PoolSvc::createCollection(const std::string& collectionType, collection = "PFN:" + collectionName; } } - if (contextId >= m_persistencySvcVec.size()) { - contextId = IPoolSvc::kInputStream; - } - if (contextId == IPoolSvc::kInputStream && openMode != pool::ICollection::READ) { + std::lock_guard<CallMutex> lock(m_pool_mut); + if (openMode != pool::ICollection::READ) { contextId = IPoolSvc::kOutputStream; + } else { + if (contextId > m_persistencySvcVec.size()) { + contextId = IPoolSvc::kInputStream; + } else if (contextId == m_persistencySvcVec.size()) { + contextId = const_cast<PoolSvc*>(this)->getInputContext(""); + } } - std::lock_guard<CallMutex> lock(m_pool_mut); - if (contextId >= m_persistencySvcVec.size() && !const_cast<PoolSvc*>(this)->reinit().isSuccess()) { + if (contextId >= m_persistencySvcVec.size()) { return(nullptr); } std::lock_guard<CallMutex> lockC(*m_pers_mut[contextId]); @@ -579,11 +582,17 @@ Token* PoolSvc::getToken(const std::string& connection, } //__________________________________________________________________________ StatusCode PoolSvc::connect(pool::ITransaction::Type type, unsigned int contextId) const { + std::lock_guard<CallMutex> lock(m_pool_mut); if (type != pool::ITransaction::READ) { contextId = IPoolSvc::kOutputStream; + } else { + if (contextId > m_persistencySvcVec.size()) { + contextId = IPoolSvc::kInputStream; + } else if (contextId == m_persistencySvcVec.size()) { + contextId = const_cast<PoolSvc*>(this)->getInputContext(""); + } } - std::lock_guard<CallMutex> lock(m_pool_mut); - if (contextId >= m_persistencySvcVec.size() && !const_cast<PoolSvc*>(this)->reinit().isSuccess()) { + if (contextId >= m_persistencySvcVec.size()) { return(StatusCode::FAILURE); } std::lock_guard<CallMutex> lockC(*m_pers_mut[contextId]);