diff --git a/tdutils/td/utils/buffer.h b/tdutils/td/utils/buffer.h index 401c2bac0..975ddf3fa 100644 --- a/tdutils/td/utils/buffer.h +++ b/tdutils/td/utils/buffer.h @@ -147,10 +147,10 @@ class BufferSlice { debug_untrack(); } - void debug_track() { + void debug_track() const { BufferAllocator::track_buffer_slice(static_cast(size())); } - void debug_untrack() { + void debug_untrack() const { BufferAllocator::track_buffer_slice(-static_cast(size())); } @@ -214,6 +214,7 @@ class BufferSlice { BufferSlice from_slice(Slice slice) const { auto res = BufferSlice(BufferAllocator::create_reader(buffer_)); + res.debug_untrack(); res.begin_ = static_cast(slice.ubegin() - buffer_->data_); res.end_ = static_cast(slice.uend() - buffer_->data_); res.debug_track(); diff --git a/test/http.cpp b/test/http.cpp index 1982c79f7..b053b8730 100644 --- a/test/http.cpp +++ b/test/http.cpp @@ -134,6 +134,16 @@ TEST(Http, reader) { SET_VERBOSITY_LEVEL(VERBOSITY_NAME(ERROR)); auto start_mem = BufferAllocator::get_buffer_mem(); auto start_size = BufferAllocator::get_buffer_slice_size(); + { + BufferSlice a("test test"); + BufferSlice b = std::move(a); + a = std::move(b); + BufferSlice c = a.from_slice(a); + CHECK(c.size() == a.size()); + } + clear_thread_locals(); + ASSERT_EQ(start_mem, BufferAllocator::get_buffer_mem()); + ASSERT_EQ(start_size, BufferAllocator::get_buffer_slice_size()); for (int i = 0; i < 20; i++) { td::ChainBufferWriter input_writer; auto input = input_writer.extract_reader();