From 469fd180ed9bbdf1480ae2172e9696c644a44c07 Mon Sep 17 00:00:00 2001 From: Peter van Gemmeren <gemmeren@anl.gov> Date: Wed, 19 Apr 2017 15:45:58 -0500 Subject: [PATCH] Fix context creation for AthenaMP: Rather than reinit() PoolSvc, create a new PersistencySvc on demand. Former-commit-id: acc7af79f02e994f6cf746c2d3acaceafb2e86e7 --- Database/AthenaPOOL/PoolSvc/src/PoolSvc.cxx | 25 ++++++++++++++------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/Database/AthenaPOOL/PoolSvc/src/PoolSvc.cxx b/Database/AthenaPOOL/PoolSvc/src/PoolSvc.cxx index 0166e957d7d..b4224da7d7b 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]); -- GitLab