diff --git a/receiver/JFJochReceiverRugnuxStills.cpp b/receiver/JFJochReceiverRugnuxStills.cpp index 15ad046c6..f9dcf5260 100644 --- a/receiver/JFJochReceiverRugnuxStills.cpp +++ b/receiver/JFJochReceiverRugnuxStills.cpp @@ -9,6 +9,7 @@ #include "../common/time_utc.h" #include "../frame_serialize/CBORStream2Serializer.h" #include "../rugnux/RugnuxDefaults.h" +#include "RugnuxStructure.h" JFJochReceiverRugnuxStills::JFJochReceiverRugnuxStills(const DiffractionExperiment &in_experiment, const PixelMask &in_pixel_mask, @@ -216,8 +217,14 @@ void JFJochReceiverRugnuxStills::SendAnalysedImage(DataMessage &message, const A void JFJochReceiverRugnuxStills::AddToEndMessage(EndMessage &message) { JFJochReceiverStream::AddToEndMessage(message); - if (stills) - stills->FillEndMessage(message); + // A failure here costs the end message the analysis only: it goes out as the receiver made it. + try { + if (stills) + stills->FillEndMessage(message); + } catch (const std::exception &e) { + logger.Error("rugnux live: the end message goes without the analysis results - {}", e.what()); + DropResultBlocks(message); + } } void JFJochReceiverRugnuxStills::Cut(const std::string &reason) { diff --git a/receiver/StillsGPUAnalysis.h b/receiver/StillsGPUAnalysis.h index 23a4e3418..bbc87e36a 100644 --- a/receiver/StillsGPUAnalysis.h +++ b/receiver/StillsGPUAnalysis.h @@ -88,7 +88,7 @@ public: void FillEndMessage(EndMessage &message) const; private: - const DiffractionExperiment &experiment; + const DiffractionExperiment experiment; const PixelMask &mask; const StartMessage start; IndexerThreadPool *indexing_thread_pool;