diff --git a/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx b/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx index 20c566df027c05f0c40c032be6a2d6f6a33676e4..cd56cc19a0e912eec1b027e482e1e0d141400714 100644 --- a/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx +++ b/HLT/Trigger/TrigControl/TrigServices/src/HltROBDataProviderSvc.cxx @@ -16,6 +16,9 @@ // Athena +// STL includes +#include <algorithm> // std::find + HltROBDataProviderSvc::HltROBDataProviderSvc(const std::string& name, ISvcLocator* pSvcLocator) : base_class(name, pSvcLocator) { @@ -338,7 +341,7 @@ void HltROBDataProviderSvc::getROBData(const EventContext& context, // check input ROB list against cache eventCache_checkRobListToCache(cache, robIds, robFragments, robIds_missing) ; - // missing ROB fragments from the DCM and add them to the cache + // no missing ROB fragments, return the found ROB fragments if (robIds_missing.size() == 0) { ATH_MSG_DEBUG( __FUNCTION__ << ": All requested ROB Ids were found in the cache. "); return; @@ -552,6 +555,13 @@ void HltROBDataProviderSvc::eventCache_checkRobListToCache(EventCache* cache, co for (uint32_t id : robIds_toCheck) { + // check for duplicate IDs on the list of missing ROBs + std::vector<uint32_t>::iterator missing_it = std::find(robIds_missing.begin(), robIds_missing.end(), id); + if (missing_it != robIds_missing.end()) { + ATH_MSG_VERBOSE(__FUNCTION__ << " ROB Id : 0x" << MSG::hex << id << MSG::dec <<" is already on the list of missing IDs."); + continue; + } + // check if ROB is already in cache ROBMAP::const_iterator map_it = cache->robmap.find(id); if (map_it != cache->robmap.end()) {