diff --git a/Utilities/XrdAdaptor/src/XrdRequestManager.cc b/Utilities/XrdAdaptor/src/XrdRequestManager.cc index 05c2d3e39bfd4..4a30ef480af66 100644 --- a/Utilities/XrdAdaptor/src/XrdRequestManager.cc +++ b/Utilities/XrdAdaptor/src/XrdRequestManager.cc @@ -392,6 +392,17 @@ std::shared_ptr RequestManager::getActiveFile() { std::lock_guard sentry(m_source_mutex); + if (m_activeSources.empty()) + { + edm::Exception ex(edm::errors::FileReadError); + ex << "XrdAdaptor::RequestManager::getActiveFile(name='" << m_name + << "', flags=0x" << std::hex << m_flags + << ", permissions=0" << std::oct << m_perms << std::dec + << ") => Source used after fatal exception."; + ex.addContext("In XrdAdaptor::RequestManager::handle()"); + addConnections(ex); + throw ex; + } return m_activeSources[0]->getFileHandle(); } @@ -461,6 +472,17 @@ RequestManager::pickSingleSource() m_nextInitialSourceToggle = true; } } + else if (m_activeSources.empty()) + { + edm::Exception ex(edm::errors::FileReadError); + ex << "XrdAdaptor::RequestManager::handle read(name='" << m_name + << "', flags=0x" << std::hex << m_flags + << ", permissions=0" << std::oct << m_perms << std::dec + << ") => Source used after fatal exception."; + ex.addContext("In XrdAdaptor::RequestManager::handle()"); + addConnections(ex); + throw ex; + } else { source = m_activeSources[0]; @@ -569,7 +591,6 @@ XrdAdaptor::RequestManager::handle(std::shared_ptr > io edm::CPUTimer timer; timer.start(); - assert(m_activeSources.size()); if (m_activeSources.size() == 1) { std::shared_ptr c_ptr(new XrdAdaptor::ClientRequest(*this, iolist)); @@ -577,6 +598,18 @@ XrdAdaptor::RequestManager::handle(std::shared_ptr > io m_activeSources[0]->handle(c_ptr); return c_ptr->get_future(); } + // Make sure active + else if (m_activeSources.empty()) + { + edm::Exception ex(edm::errors::FileReadError); + ex << "XrdAdaptor::RequestManager::handle readv(name='" << m_name + << "', flags=0x" << std::hex << m_flags + << ", permissions=0" << std::oct << m_perms << std::dec + << ") => Source used after fatal exception."; + ex.addContext("In XrdAdaptor::RequestManager::handle()"); + addConnections(ex); + throw ex; + } assert(iolist.get()); std::shared_ptr > req1(new std::vector);