From ec3210008c3ccb18e6ffaed4ef61c4d66de21626 Mon Sep 17 00:00:00 2001 From: Markus Frank <Markus.Frank@cern.ch> Date: Mon, 12 Jun 2023 18:04:11 +0200 Subject: [PATCH] Protect DDDigi edm4hep output against races --- DDDigi/io/DigiEdm4hepOutput.cpp | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/DDDigi/io/DigiEdm4hepOutput.cpp b/DDDigi/io/DigiEdm4hepOutput.cpp index 34170052a..3a80639d8 100644 --- a/DDDigi/io/DigiEdm4hepOutput.cpp +++ b/DDDigi/io/DigiEdm4hepOutput.cpp @@ -146,27 +146,36 @@ namespace dd4hep { /// Clear local data content void DigiEdm4hepOutput::internals_t::clear() { +#if 0 m_header.second->clear(); m_particles.second->clear(); for( const auto& c : m_tracker_collections ) c.second->clear(); for( const auto& c : m_calo_collections ) c.second->clear(); +#endif + *m_header.second = {}; + *m_particles.second = {}; + for( const auto& c : m_tracker_collections ) + *c.second = {}; + for( const auto& c : m_calo_collections ) + *c.second = {}; } /// Commit data at end of filling procedure void DigiEdm4hepOutput::internals_t::commit() { - if ( m_writer ) { - std::lock_guard<std::mutex> protection(m_lock); - podio::Frame frame { }; - frame.put( std::move(*m_header.second), m_header.first); - frame.put( std::move(*m_particles.second), m_particles.first); - for( const auto& c : m_tracker_collections ) - frame.put( std::move(*c.second), c.first); - for( const auto& c : m_calo_collections ) - frame.put( std::move(*c.second), c.first); - - m_writer->writeFrame(frame, m_section_name); + if ( m_writer ) {{ + std::lock_guard<std::mutex> protection(m_lock); + podio::Frame frame { }; + frame.put( std::move(*m_header.second), m_header.first); + frame.put( std::move(*m_particles.second), m_particles.first); + for( const auto& c : m_tracker_collections ) + frame.put( std::move(*c.second), c.first); + for( const auto& c : m_calo_collections ) + frame.put( std::move(*c.second), c.first); + + m_writer->writeFrame(frame, m_section_name); + } clear(); return; } -- GitLab