+void Segment::free_unused_memory()
+{
+ lock_guard<recursive_mutex> lock(mutex_);
+
+ // Do not mess with the data chunks if we have iterators pointing at them
+ if (iterator_count_ > 0) {
+ mem_optimization_requested_ = true;
+ return;
+ }
+
+ // No more data will come in, so re-create the last chunk accordingly
+ uint8_t* resized_chunk = new uint8_t[used_samples_ * unit_size_];
+ memcpy(resized_chunk, current_chunk_, used_samples_ * unit_size_);
+
+ delete[] current_chunk_;
+ current_chunk_ = resized_chunk;
+
+ data_chunks_.pop_back();
+ data_chunks_.push_back(resized_chunk);
+}
+