@@ -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
9899DECLARE_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 }
0 commit comments