diff --git a/sstables/consumer.hh b/sstables/consumer.hh index 378dd934ee..d83da71c99 100644 --- a/sstables/consumer.hh +++ b/sstables/consumer.hh @@ -220,8 +220,9 @@ public: } inline read_status read_bytes(temporary_buffer& data, uint32_t len, fragmented_temporary_buffer& where) { if (data.size() >= len) { - std::vector> fragments; - fragments.push_back(data.share(0,len)); + auto fragments = std::move(where).release(); + fragments.clear(); + fragments.push_back(data.share(0, len)); where = fragmented_temporary_buffer(std::move(fragments), len); data.trim_front(len); return read_status::ready; diff --git a/utils/fragmented_temporary_buffer.hh b/utils/fragmented_temporary_buffer.hh index f4f1428ce4..3c09de78b7 100644 --- a/utils/fragmented_temporary_buffer.hh +++ b/utils/fragmented_temporary_buffer.hh @@ -99,6 +99,10 @@ public: } return fragmented_temporary_buffer(std::move(fragments), data_size); } + + vector_type release() && noexcept { + return std::move(_fragments); + } }; class fragmented_temporary_buffer::view {