Skip to content

Commit aece326

Browse files
authored
Merge pull request #242 from art-daq/eflumerf/StopFix
Make ArtdaqSharedMemoryInterface abort more quickly at EndOfData
2 parents 9ccd464 + b2f04d1 commit aece326

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

artdaq/ArtModules/ArtdaqSharedMemoryService_service.cc

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ class ArtdaqSharedMemoryService : public ArtdaqSharedMemoryServiceInterface
9393
bool last_read_timeout_{false};
9494
bool resume_after_timeout_;
9595
bool printed_exit_message_{false};
96+
bool end_of_data_received_{false};
9697
};
9798

9899
DECLARE_ART_SERVICE_INTERFACE_IMPL(ArtdaqSharedMemoryService, ArtdaqSharedMemoryServiceInterface, LEGACY)
@@ -247,15 +248,17 @@ std::shared_ptr<ArtdaqEvent> ArtdaqSharedMemoryService::ReceiveEvent(bool broadc
247248

248249
while (output_event == nullptr)
249250
{
250-
// If we experienced a timeout, drain any held Start/End Run/SubRun events
251-
if (last_read_timeout_)
251+
// If we experienced a timeout, or have an EndOfData event, drain any held Start/End Run/SubRun events
252+
if (last_read_timeout_ || end_of_data_received_)
252253
{
253254
if (event_ordering_.size() > 0)
254255
{
255256
output_event = event_ordering_.front();
256257
event_ordering_.pop_front();
257258
break; // while(output_event == nullptr)
258259
}
260+
// Don't try to get more data if we have an EndOfData event
261+
if (end_of_data_received_) { break; }
259262
}
260263

261264
bool eventInEventOrder = false;
@@ -268,6 +271,10 @@ std::shared_ptr<ArtdaqEvent> ArtdaqSharedMemoryService::ReceiveEvent(bool broadc
268271
{
269272
continue; // for (auto it = event_ordering_.begin(); it != event_ordering_.end(); ++it)
270273
}
274+
if (type == artdaq::Fragment::EndOfDataFragmentType)
275+
{
276+
end_of_data_received_ = true;
277+
}
271278
eventInEventOrder = true;
272279
break; // for (auto it = event_ordering_.begin(); it != event_ordering_.end(); ++it)
273280
}

artdaq/ArtModules/TransferOutputReliable_module.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,9 @@ void art::TransferOutputReliable::SendMessage(artdaq::FragmentPtr& fragment)
8080
<< ", length=" << fragment->dataSizeBytes();
8181
auto sts = artdaq::TransferInterface::CopyStatus::kErrorNotRequiringException;
8282
sts = transfer_->transfer_fragment_reliable_mode(std::move(*fragment));
83-
if(sts != artdaq::TransferInterface::CopyStatus::kSuccess)
83+
if (sts != artdaq::TransferInterface::CopyStatus::kSuccess)
8484
{
85-
TLOG(TLVL_ERROR) << "Error sending Fragment " << seqID << " of type " << type << " and length " << length;
85+
TLOG(TLVL_ERROR) << "Error sending Fragment " << seqID << " of type " << type << " and length " << length;
8686
}
8787
}
8888

0 commit comments

Comments
 (0)