diff --git a/FWCore/Utilities/interface/ReusableObjectHolder.h b/FWCore/Utilities/interface/ReusableObjectHolder.h index 0fdf70bb2232e..1aad4150ec9c8 100644 --- a/FWCore/Utilities/interface/ReusableObjectHolder.h +++ b/FWCore/Utilities/interface/ReusableObjectHolder.h @@ -113,7 +113,12 @@ namespace edm { if (m_availableQueue.try_pop(item)) { return wrapCustomDeleter(std::move(item)); } else { - return std::shared_ptr{}; + //try a second time as try_pop can have a false failure + if (m_availableQueue.try_pop(item)) { + return wrapCustomDeleter(std::move(item)); + } else { + return std::shared_ptr{}; + } } } @@ -124,7 +129,12 @@ namespace edm { if (m_availableQueue.try_pop(item)) { return wrapCustomDeleter(std::move(item)); } else { - return wrapCustomDeleter(makeUnique(iMakeFunc())); + //try a second time as try_pop can have a false failure + if (m_availableQueue.try_pop(item)) { + return wrapCustomDeleter(std::move(item)); + } else { + return wrapCustomDeleter(makeUnique(iMakeFunc())); + } } }