mirror of
https://github.com/paulscherrerinstitute/sf_daq_buffer.git
synced 2026-05-01 01:22:23 +02:00
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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,17 +132,7 @@ char* RingBuffer<T>::reserve(shared_ptr<T> 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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<const char*>(frame_data),
|
||||
|
||||
Reference in New Issue
Block a user