Ringbuffer returns nullptr when the buffer is full

This feature will allow us to make a push/pull mechanism for the sf_h5_writer.
All classes using RingBuffer have been updated to maintain the exact same behaviour as before.
This commit is contained in:
2020-04-21 17:25:22 +02:00
parent 89328f700f
commit 77141a559c
3 changed files with 50 additions and 11 deletions
+36
View File
@@ -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);
}
}