From 821877ff8d2ffc1337bab84168790afce90dc606 Mon Sep 17 00:00:00 2001 From: Raiqa Rasool <86972954+RaiqaRasool@users.noreply.github.com> Date: Fri, 19 Jul 2024 13:06:38 -0400 Subject: [PATCH 1/2] Modified JEventProcessorPODIO::Process to acquire lock only when needed to allow JANA parallelism --- src/services/io/podio/JEventProcessorPODIO.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/services/io/podio/JEventProcessorPODIO.cc b/src/services/io/podio/JEventProcessorPODIO.cc index d99f8582f8..42d824be27 100644 --- a/src/services/io/podio/JEventProcessorPODIO.cc +++ b/src/services/io/podio/JEventProcessorPODIO.cc @@ -371,10 +371,13 @@ void JEventProcessorPODIO::FindCollectionsToWrite(const std::shared_ptr &event) { - std::lock_guard lock(m_mutex); + std::unique_lock lock(m_mutex, std::defer_lock); + lock.lock(); if (m_is_first_event) { FindCollectionsToWrite(event); + m_is_first_event = false; } + lock.unlock(); for (const std::string& coll : m_collections_to_write) { try { @@ -395,9 +398,9 @@ void JEventProcessorPODIO::Process(const std::shared_ptr &event) { // Note that collections MUST be present in frame. If a collection is null, the writer will segfault. const auto* frame = event->GetSingle(); + lock.lock(); m_writer->writeFrame(*frame, "events", m_collections_to_write); - m_is_first_event = false; - + lock.unlock(); // Print the contents of some collections, just for debugging purposes // Do this before writing just in case writing crashes if (!m_collections_to_print.empty()) { From 2a34a6fe1dd3995c0947a41a1cd0bdd7872f1692 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 13:30:31 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/services/io/podio/JEventProcessorPODIO.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/io/podio/JEventProcessorPODIO.cc b/src/services/io/podio/JEventProcessorPODIO.cc index 42d824be27..e3e5b28050 100644 --- a/src/services/io/podio/JEventProcessorPODIO.cc +++ b/src/services/io/podio/JEventProcessorPODIO.cc @@ -372,7 +372,7 @@ void JEventProcessorPODIO::FindCollectionsToWrite(const std::shared_ptr &event) { std::unique_lock lock(m_mutex, std::defer_lock); - lock.lock(); + lock.lock(); if (m_is_first_event) { FindCollectionsToWrite(event); m_is_first_event = false;