diff options
author | Aaron Rossetto <aaron.rossetto@ni.com> | 2022-05-20 07:26:41 -0500 |
---|---|---|
committer | Aaron Rossetto <aaron.rossetto@ni.com> | 2022-06-10 13:24:05 -0500 |
commit | 9162e6842354d4022f7692536a888d10bee8fede (patch) | |
tree | f3af06b2d5aa375d20bd4a9374d24b4d09fc5b9f | |
parent | f9327a4a400269769329512ac145a4b845b480e6 (diff) | |
download | uhd-9162e6842354d4022f7692536a888d10bee8fede.tar.gz uhd-9162e6842354d4022f7692536a888d10bee8fede.tar.bz2 uhd-9162e6842354d4022f7692536a888d10bee8fede.zip |
rfnoc: Fix vector use in replay_block_control_impl
This commit fixes an issue in `replay_block_control_impl` with the
initialization of the `_cmd_fifo_spaces` vector member variable.
`std::vector<>::reserve()` only allocates memory for the vector items;
it does not resize the vector (i.e., instantiating an `std::vector<>`
and then calling `reserve()` leaves it with a size of 0). Attempting to
index a zero-sized vector causes some C++ debug mode runtimes to throw
an index out-of-range exception. The commit instantiates the vector
using the constructor variant that allocates memory sufficient for the
entries and default initializes them so that it can be indexed without
issue.
-rw-r--r-- | host/lib/rfnoc/replay_block_control.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/host/lib/rfnoc/replay_block_control.cpp b/host/lib/rfnoc/replay_block_control.cpp index f7497c657..565108420 100644 --- a/host/lib/rfnoc/replay_block_control.cpp +++ b/host/lib/rfnoc/replay_block_control.cpp @@ -87,7 +87,8 @@ public: _word_size( uint16_t((_replay_reg_iface.peek32(REG_MEM_SIZE_ADDR) >> 16) & 0xFFFF) / 8), _mem_size( - uint64_t(1ULL << (_replay_reg_iface.peek32(REG_MEM_SIZE_ADDR) & 0xFFFF))) + uint64_t(1ULL << (_replay_reg_iface.peek32(REG_MEM_SIZE_ADDR) & 0xFFFF))), + _cmd_fifo_spaces(_num_output_ports) { if (get_num_input_ports() != get_num_output_ports()) { throw uhd::assertion_error( @@ -175,7 +176,6 @@ public: _play_size.reserve(_num_output_ports); _packet_size.reserve(_num_output_ports); _atomic_item_size_out.reserve(_num_output_ports); - _cmd_fifo_spaces.reserve(_num_output_ports); for (size_t port = 0; port < _num_output_ports; port++) { _register_output_props(port); _replay_reg_iface.poke32(REG_PLAY_ITEM_SIZE_ADDR, |