From 8ad4844fbee60d522acece11d6c2c5caaa80af41 Mon Sep 17 00:00:00 2001 From: Joerg Stelzer <joerg.stelzer@cern.ch> Date: Sun, 20 Dec 2020 19:04:43 +0100 Subject: [PATCH] Fix once-per-job memory leak in CTP simulation --- Trigger/TrigT1/TrigT1CTP/src/ResultBuilder.cxx | 11 +++++++---- Trigger/TrigT1/TrigT1CTP/src/ResultBuilder.h | 4 ++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Trigger/TrigT1/TrigT1CTP/src/ResultBuilder.cxx b/Trigger/TrigT1/TrigT1CTP/src/ResultBuilder.cxx index 890651d8809..78a8f419f53 100644 --- a/Trigger/TrigT1/TrigT1CTP/src/ResultBuilder.cxx +++ b/Trigger/TrigT1/TrigT1CTP/src/ResultBuilder.cxx @@ -38,6 +38,9 @@ LVL1CTP::ResultBuilder::ResultBuilder( const std::string& type, LVL1CTP::ResultBuilder::~ResultBuilder() { delete m_ctpDataFormat; + for(auto & x : m_internalTrigger) { + delete x.second; + } } @@ -78,10 +81,10 @@ LVL1CTP::ResultBuilder::createTriggerConfigMaps(const ConfigSource & cfgSrc) con } // build map of name to ctp thresholds - m_thrConfigMap = new ThresholdMap( cfgSrc.l1menu() ); + m_thrConfigMap = std::make_unique<ThresholdMap>( cfgSrc.l1menu() ); // build map of name to ctp items - m_itemConfigMap = new ItemMap( cfgSrc.l1menu() ); + m_itemConfigMap = std::make_unique<ItemMap>( cfgSrc.l1menu() ); } else if( cfgSrc.ctpConfig() != nullptr ) { @@ -102,9 +105,9 @@ LVL1CTP::ResultBuilder::createTriggerConfigMaps(const ConfigSource & cfgSrc) con m_internalTrigger[ rndm->name() ] = rndm; } - m_thrConfigMap = new ThresholdMap( cfgSrc.ctpConfig()->menu().thresholdVector()); + m_thrConfigMap = std::make_unique<ThresholdMap>( cfgSrc.ctpConfig()->menu().thresholdVector()); - m_itemConfigMap = new ItemMap( cfgSrc.ctpConfig()->menu().itemVector(), + m_itemConfigMap = std::make_unique<ItemMap>( cfgSrc.ctpConfig()->menu().itemVector(), cfgSrc.ctpConfig()->prescaleSet() ); } else { ATH_MSG_FATAL("No L1 trigger menu was provided"); diff --git a/Trigger/TrigT1/TrigT1CTP/src/ResultBuilder.h b/Trigger/TrigT1/TrigT1CTP/src/ResultBuilder.h index a211285f9b0..3694457bd1e 100644 --- a/Trigger/TrigT1/TrigT1CTP/src/ResultBuilder.h +++ b/Trigger/TrigT1/TrigT1CTP/src/ResultBuilder.h @@ -95,8 +95,8 @@ namespace LVL1CTP { std::vector<std::string> firedItems(const std::vector<uint32_t>& triggerWords) const; // configuration information - mutable ThresholdMap* m_thrConfigMap ATLAS_THREAD_SAFE { nullptr }; //!< Map between threshold objects and their CTP-internal description - mutable ItemMap* m_itemConfigMap ATLAS_THREAD_SAFE { nullptr }; //!< Map between item objects and their CTP-internal description + mutable std::unique_ptr<ThresholdMap> m_thrConfigMap ATLAS_THREAD_SAFE { nullptr }; //!< Map between threshold objects and their CTP-internal description + mutable std::unique_ptr<ItemMap> m_itemConfigMap ATLAS_THREAD_SAFE { nullptr }; //!< Map between item objects and their CTP-internal description mutable InternalTriggerMap m_internalTrigger ATLAS_THREAD_SAFE; //!< internal triggers BGRP and RNDM unsigned int m_ctpVersionNumber { 4 }; //!< CTP data format version (4 in most of Run 2 and in Run 3) CTPdataformatVersion* m_ctpDataFormat { nullptr }; //!< CTP data format details -- GitLab