From 4148049819644d6eece0777837e6afe217d91469 Mon Sep 17 00:00:00 2001 From: Nathan Brei <nbrei@jlab.org> Date: Wed, 27 Nov 2024 00:50:13 -0500 Subject: [PATCH] Fix logic in JExecutionEngine::Fire --- src/libraries/JANA/Engine/JExecutionEngine.cc | 47 +++++++++---------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/src/libraries/JANA/Engine/JExecutionEngine.cc b/src/libraries/JANA/Engine/JExecutionEngine.cc index 41bc99f0b..189684ba2 100644 --- a/src/libraries/JANA/Engine/JExecutionEngine.cc +++ b/src/libraries/JANA/Engine/JExecutionEngine.cc @@ -706,6 +706,17 @@ JArrow::FireResult JExecutionEngine::Fire(size_t arrow_id, size_t location_id) { JEvent* event = nullptr; if (port != -1) { event = arrow->pull(port, location_id); + if (event == nullptr) { + LOG_WARN(GetLogger()) << "Firing unsuccessful: Arrow needs an input event from port " << port << ", but the queue or pool is empty." << LOG_END; + arrow_state.active_tasks -= 1; + return JArrow::FireResult::NotRunYet; + } + else { + LOG_WARN(GetLogger()) << "Input event #" << event->GetEventNumber() << " from port " << port << LOG_END; + } + } + else { + LOG_WARN(GetLogger()) << "No input events" << LOG_END; } lock.unlock(); @@ -713,34 +724,22 @@ JArrow::FireResult JExecutionEngine::Fire(size_t arrow_id, size_t location_id) { JArrow::OutputData outputs; JArrow::FireResult result = JArrow::FireResult::NotRunYet; - if (event != nullptr || port == -1) { - if (event != nullptr) { - LOG_WARN(GetLogger()) << "Input event #" << event->GetEventNumber() << " from port " << port << LOG_END; - } - else { - LOG_WARN(GetLogger()) << "No input events" << LOG_END; - } - LOG_WARN(GetLogger()) << "Firing arrow" << LOG_END; - arrow->fire(event, outputs, output_count, result); - LOG_WARN(GetLogger()) << "Fired arrow" << LOG_END; - if (output_count == 0) { - LOG_WARN(GetLogger()) << "No output events" << LOG_END; - } - else { - for (size_t i=0; i<output_count; ++i) { - LOG_WARN(GetLogger()) << "Output event #" << outputs.at(i).first->GetEventNumber() << " on port " << outputs.at(i).second << LOG_END; - } - } - - lock.lock(); - arrow->push(outputs, output_count, location_id); - arrow_state.active_tasks -= 1; - lock.unlock(); + LOG_WARN(GetLogger()) << "Firing arrow" << LOG_END; + arrow->fire(event, outputs, output_count, result); + LOG_WARN(GetLogger()) << "Fired arrow with result " << to_string(result) << LOG_END; + if (output_count == 0) { + LOG_WARN(GetLogger()) << "No output events" << LOG_END; } else { - LOG_WARN(GetLogger()) << "Firing unsuccessful: Arrow needs an input event from port " << port << ", but the queue or pool is empty." << LOG_END; + for (size_t i=0; i<output_count; ++i) { + LOG_WARN(GetLogger()) << "Output event #" << outputs.at(i).first->GetEventNumber() << " on port " << outputs.at(i).second << LOG_END; + } } + lock.lock(); + arrow->push(outputs, output_count, location_id); + arrow_state.active_tasks -= 1; + lock.unlock(); return result; }