diff --git a/L1Trigger/DTTrackFinder/interface/L1MuDTTrackFinder.h b/L1Trigger/DTTrackFinder/interface/L1MuDTTrackFinder.h index 2a538f4050c50..c41d83980e249 100644 --- a/L1Trigger/DTTrackFinder/interface/L1MuDTTrackFinder.h +++ b/L1Trigger/DTTrackFinder/interface/L1MuDTTrackFinder.h @@ -25,6 +25,7 @@ //--------------- #include +#include //---------------------- // Base Class Headers -- @@ -99,7 +100,7 @@ class L1MuDTTrackFinder { int numberOfTracks(int bx); /// return configuration - static L1MuDTTFConfig* config() { return m_config; } + static L1MuDTTFConfig* config() { return m_config.get(); } std::vector& getcache0() { return _cache0; } @@ -121,7 +122,7 @@ class L1MuDTTrackFinder { L1MuDTMuonSorter* m_ms; ///< DT Muon Sorter edm::EDGetTokenT m_DTDigiToken; - static L1MuDTTFConfig* m_config; ///< Track Finder configuration + static std::shared_ptr m_config; ///< Track Finder configuration }; #endif diff --git a/L1Trigger/DTTrackFinder/src/L1MuDTTrackFinder.cc b/L1Trigger/DTTrackFinder/src/L1MuDTTrackFinder.cc index ea7b4c0f82805..1be2a0016ea4c 100644 --- a/L1Trigger/DTTrackFinder/src/L1MuDTTrackFinder.cc +++ b/L1Trigger/DTTrackFinder/src/L1MuDTTrackFinder.cc @@ -53,8 +53,11 @@ using namespace std; L1MuDTTrackFinder::L1MuDTTrackFinder(const edm::ParameterSet& ps, edm::ConsumesCollector&& iC) { // set configuration parameters - if (m_config == nullptr) - m_config = new L1MuDTTFConfig(ps); + if (not m_config) { + auto temp = std::make_shared(ps); + std::shared_ptr empty; + std::atomic_compare_exchange_strong(&m_config, &empty, temp); + } if (m_config->Debug(1)) cout << endl; @@ -96,10 +99,6 @@ L1MuDTTrackFinder::~L1MuDTTrackFinder() { m_wsvec.clear(); delete m_ms; - - if (m_config) - delete m_config; - m_config = nullptr; } //-------------- @@ -322,4 +321,4 @@ int L1MuDTTrackFinder::numberOfTracks(int bx) { // static data members -L1MuDTTFConfig* L1MuDTTrackFinder::m_config = nullptr; +std::shared_ptr L1MuDTTrackFinder::m_config; diff --git a/L1Trigger/GlobalMuonTrigger/interface/L1MuGlobalMuonTrigger.h b/L1Trigger/GlobalMuonTrigger/interface/L1MuGlobalMuonTrigger.h index faf22d708f33c..e46731d290dc2 100644 --- a/L1Trigger/GlobalMuonTrigger/interface/L1MuGlobalMuonTrigger.h +++ b/L1Trigger/GlobalMuonTrigger/interface/L1MuGlobalMuonTrigger.h @@ -17,6 +17,8 @@ // C++ Headers -- //--------------- +#include + //---------------------- // Base Class Headers -- //---------------------- @@ -98,7 +100,7 @@ class L1MuGlobalMuonTrigger : public edm::one::EDProducer m_config; - static L1MuGMTDebugBlock* m_db; + static std::shared_ptr m_db; unsigned long long m_L1MuGMTScalesCacheID; unsigned long long m_L1MuTriggerScalesCacheID; diff --git a/L1Trigger/GlobalMuonTrigger/src/L1MuGlobalMuonTrigger.cc b/L1Trigger/GlobalMuonTrigger/src/L1MuGlobalMuonTrigger.cc index 7f24637f476c2..b67b186876d46 100644 --- a/L1Trigger/GlobalMuonTrigger/src/L1MuGlobalMuonTrigger.cc +++ b/L1Trigger/GlobalMuonTrigger/src/L1MuGlobalMuonTrigger.cc @@ -71,8 +71,11 @@ L1MuGlobalMuonTrigger::L1MuGlobalMuonTrigger(const edm::ParameterSet& ps) { m_ExtendedCands.reserve(20); // set configuration parameters - if (!m_config) - m_config = new L1MuGMTConfig(ps); + if (not m_config) { + auto temp = std::make_shared(ps); + std::shared_ptr empty; + std::atomic_compare_exchange_strong(&m_config, &empty, temp); + } m_writeLUTsAndRegs = ps.getUntrackedParameter("WriteLUTsAndRegs", false); // build GMT @@ -119,8 +122,11 @@ L1MuGlobalMuonTrigger::L1MuGlobalMuonTrigger(const edm::ParameterSet& ps) { edm::LogVerbatim("GMT_info") << "creating GMT Sorter"; m_Sorter = new L1MuGMTSorter(*this); // barrel - if (!m_db) - m_db = new L1MuGMTDebugBlock(m_config->getBxMin(), m_config->getBxMax()); + if (not m_db) { + auto temp = std::make_shared(m_config->getBxMin(), m_config->getBxMax()); + std::shared_ptr empty; + std::atomic_compare_exchange_strong(&m_db, &empty, temp); + } usesResource("L1MuGlobalMuonTrigger"); ///EventSetup Tokens m_gmtScalesToken = esConsumes(); @@ -135,10 +141,6 @@ L1MuGlobalMuonTrigger::L1MuGlobalMuonTrigger(const edm::ParameterSet& ps) { // Destructor -- //-------------- L1MuGlobalMuonTrigger::~L1MuGlobalMuonTrigger() { - if (m_db) - delete m_db; - m_db = nullptr; - delete m_Sorter; delete m_Merger[1]; // endcap Merger delete m_Merger[0]; // barrel Merger @@ -152,10 +154,6 @@ L1MuGlobalMuonTrigger::~L1MuGlobalMuonTrigger() { delete m_Matcher[0]; // barrel matcher delete m_PSB; - if (m_config) - delete m_config; - m_config = nullptr; - // copied from produce() by Jim B, 7 Aug 2007 std::vector::iterator irr = m_ReadoutRingbuffer.begin(); for (; irr != m_ReadoutRingbuffer.end(); irr++) @@ -452,5 +450,5 @@ std::unique_ptr L1MuGlobalMuonTrigger::getReadoutColle // static data members -L1MuGMTConfig* L1MuGlobalMuonTrigger::m_config = nullptr; -L1MuGMTDebugBlock* L1MuGlobalMuonTrigger::m_db = nullptr; +std::shared_ptr L1MuGlobalMuonTrigger::m_config; +std::shared_ptr L1MuGlobalMuonTrigger::m_db; diff --git a/L1Trigger/L1TMuonBarrel/interface/L1MuBMTrackFinder.h b/L1Trigger/L1TMuonBarrel/interface/L1MuBMTrackFinder.h index c7990cbbbb090..cf8b8408ece3c 100644 --- a/L1Trigger/L1TMuonBarrel/interface/L1MuBMTrackFinder.h +++ b/L1Trigger/L1TMuonBarrel/interface/L1MuBMTrackFinder.h @@ -27,6 +27,8 @@ #include #include +#include + //---------------------- // Base Class Headers -- //---------------------- @@ -114,7 +116,7 @@ class L1MuBMTrackFinder { int numberOfTracks(int bx); /// return configuration - static const L1MuBMTFConfig* config() { return m_config; } + static const L1MuBMTFConfig* config() { return m_config.get(); } l1t::RegionalMuonCandBxCollection& getcache() { return _cache; } l1t::RegionalMuonCandBxCollection& getcache0() { return _cache0; } @@ -141,7 +143,7 @@ class L1MuBMTrackFinder { std::vector m_wsvec; ///< Wedge Sorters L1MuBMMuonSorter* m_ms; ///< BM Muon Sorter - static L1MuBMTFConfig* m_config; ///< Track Finder configuration + static std::shared_ptr m_config; ///< Track Finder configuration edm::EDGetTokenT m_DTDigiToken; edm::ESGetToken m_mbParamsToken; diff --git a/L1Trigger/L1TMuonBarrel/src/L1MuBMTrackFinder.cc b/L1Trigger/L1TMuonBarrel/src/L1MuBMTrackFinder.cc index ff9dff7084e9f..774d29dccadab 100644 --- a/L1Trigger/L1TMuonBarrel/src/L1MuBMTrackFinder.cc +++ b/L1Trigger/L1TMuonBarrel/src/L1MuBMTrackFinder.cc @@ -60,8 +60,11 @@ using namespace std; L1MuBMTrackFinder::L1MuBMTrackFinder(const edm::ParameterSet& ps, edm::ConsumesCollector&& iC) : _cache0(144, -9, 8), _cache(36, -9, 8) { // set configuration parameters - if (m_config == nullptr) - m_config = new L1MuBMTFConfig(ps); + if (not m_config) { + auto temp = std::make_shared(ps); + std::shared_ptr empty; + std::atomic_compare_exchange_strong(&m_config, &empty, temp); + } if (L1MuBMTFConfig::Debug(1)) cout << endl; @@ -101,10 +104,6 @@ L1MuBMTrackFinder::~L1MuBMTrackFinder() { m_wsvec.clear(); delete m_ms; - - if (m_config) - delete m_config; - m_config = nullptr; } //-------------- @@ -528,4 +527,4 @@ int L1MuBMTrackFinder::setAdd(int ust, int rel_add) { // static data members -L1MuBMTFConfig* L1MuBMTrackFinder::m_config = nullptr; +std::shared_ptr L1MuBMTrackFinder::m_config;