diff --git a/core-buffer/src/UdpRecvModule.cpp b/core-buffer/src/UdpRecvModule.cpp index 49a77fc..c0514af 100644 --- a/core-buffer/src/UdpRecvModule.cpp +++ b/core-buffer/src/UdpRecvModule.cpp @@ -87,6 +87,18 @@ void UdpRecvModule::receive_thread( metadata->n_recv_packets = 0; char* frame_buffer = ring_buffer_.reserve(metadata); + if (frame_buffer == nullptr) { + stringstream err_msg; + + using namespace date; + using namespace chrono; + err_msg << "[" << system_clock::now() << "]"; + err_msg << "[UdpRecvModule::receive_thread]"; + err_msg << " Ring buffer is full."; + err_msg << endl; + + throw runtime_error(err_msg.str()); + } jungfrau_packet packet_buffer; @@ -118,6 +130,18 @@ void UdpRecvModule::receive_thread( metadata->n_recv_packets = 0; frame_buffer = ring_buffer_.reserve(metadata); + if (frame_buffer == nullptr) { + stringstream err_msg; + + using namespace date; + using namespace chrono; + err_msg << "[" << system_clock::now() << "]"; + err_msg << "[UdpRecvModule::receive_thread]"; + err_msg << " Ring buffer is full."; + err_msg << endl; + + throw runtime_error(err_msg.str()); + } memset(frame_buffer, 0, JUNGFRAU_DATA_BYTES_PER_FRAME); frame_metadata->frame_index = packet_buffer.framenum; @@ -146,6 +170,18 @@ void UdpRecvModule::receive_thread( metadata->n_recv_packets = 0; frame_buffer = ring_buffer_.reserve(metadata); + if (frame_buffer == nullptr) { + stringstream err_msg; + + using namespace date; + using namespace chrono; + err_msg << "[" << system_clock::now() << "]"; + err_msg << "[UdpRecvModule::receive_thread]"; + err_msg << " Ring buffer is full."; + err_msg << endl; + + throw runtime_error(err_msg.str()); + } memset(frame_buffer, 0, JUNGFRAU_DATA_BYTES_PER_FRAME); } } diff --git a/core-writer/src/RingBuffer.cpp b/core-writer/src/RingBuffer.cpp index 0adae43..750cb54 100644 --- a/core-writer/src/RingBuffer.cpp +++ b/core-writer/src/RingBuffer.cpp @@ -132,17 +132,7 @@ char* RingBuffer::reserve(shared_ptr frame_metadata) buffer_used_slots_++; } else { - stringstream err_msg; - - using namespace date; - using namespace chrono; - err_msg << "[" << system_clock::now() << "]"; - err_msg << "[RingBuffer::reserve]"; - err_msg << " Ring buffer is full."; - err_msg << " Collision at write_index = " << write_index_; - err_msg << endl; - - throw runtime_error(err_msg.str()); + return nullptr; } } diff --git a/core-writer/src/module/ZmqRecvModule.cpp b/core-writer/src/module/ZmqRecvModule.cpp index c1ab03d..c9f8c88 100644 --- a/core-writer/src/module/ZmqRecvModule.cpp +++ b/core-writer/src/module/ZmqRecvModule.cpp @@ -185,6 +185,19 @@ void ZmqRecvModule::receive_thread(const string& connect_address) } char* buffer = ring_buffer_.reserve(frame_metadata); + if (buffer == nullptr) { + stringstream err_msg; + + using namespace date; + using namespace chrono; + err_msg << "[" << system_clock::now() << "]"; + err_msg << "[UdpRecvModule::receive_thread]"; + err_msg << " Ring buffer is full."; + err_msg << endl; + + throw runtime_error(err_msg.str()); + } + memcpy( buffer, static_cast(frame_data),