Solve buffer reference bug in reader

This commit is contained in:
2020-05-19 09:38:45 +02:00
parent a79215a187
commit 09331e4b4c
2 changed files with 8 additions and 9 deletions
+4 -3
View File
@@ -18,10 +18,11 @@ class ReplayH5Reader {
H5::DataSet dset_metadata_;
H5::DataSet dset_frame_;
std::unique_ptr<char[]> frame_buffer = std::make_unique<char[]>(
std::unique_ptr<char[]> frame_buffer_ = std::make_unique<char[]>(
core_buffer::MODULE_N_BYTES * core_buffer::REPLAY_READ_BUFFER_SIZE);
std::unique_ptr<char[]> metadata_buffer = std::make_unique<char[]>(
sizeof(ModuleFrame) * core_buffer::FILE_MOD);
std::unique_ptr<ModuleFrame[]> metadata_buffer_ =
std::make_unique<ModuleFrame[]>(core_buffer::FILE_MOD);
uint64_t buffer_start_pulse_id_ = 0;
uint64_t buffer_end_pulse_id_ = 0;
void prepare_buffer_for_pulse(const uint64_t pulse_id);
+4 -6
View File
@@ -39,7 +39,7 @@ void ReplayH5Reader::prepare_buffer_for_pulse(const uint64_t pulse_id)
hsize_t f_m_start[] = {0, 0};
f_m_space.selectHyperslab(H5S_SELECT_SET, f_m_count, f_m_start);
dset_metadata_.read(&(metadata_buffer[0]), H5::PredType::NATIVE_UINT64,
dset_metadata_.read(&(metadata_buffer_[0]), H5::PredType::NATIVE_UINT64,
b_m_space, f_m_space);
buffer_start_pulse_id_ = 0;
@@ -73,7 +73,7 @@ void ReplayH5Reader::prepare_buffer_for_pulse(const uint64_t pulse_id)
hsize_t f_f_start[] = {start_index_in_file, 0, 0};
f_f_space.selectHyperslab(H5S_SELECT_SET, f_f_count, f_f_start);
dset_frame_.read(&(frame_buffer[0]), H5::PredType::NATIVE_UINT16,
dset_frame_.read(&(frame_buffer_[0]), H5::PredType::NATIVE_UINT16,
b_f_space, f_f_space);
}
@@ -104,18 +104,16 @@ bool ReplayH5Reader::get_frame(
{
prepare_buffer_for_pulse(pulse_id);
auto metadata_buffer_index = BufferUtils::get_file_frame_index(pulse_id);
memcpy(metadata,
&(metadata_buffer[metadata_buffer_index]),
&(metadata_buffer_[metadata_buffer_index]),
sizeof(ModuleFrame));
auto frame_buffer_index = pulse_id - buffer_start_pulse_id_;
memcpy(frame_buffer,
&(frame_buffer[frame_buffer_index]),
&(frame_buffer_[frame_buffer_index * MODULE_N_BYTES]),
MODULE_N_BYTES);
if (metadata->pulse_id == 0) {
// Signal that there is no frame at this pulse_id.
metadata->pulse_id = pulse_id;