Skip to content

Commit 065bdcc

Browse files
committed
AsyncStreams: Free Readable and Growable buffer slots when their refCount expires
1 parent 22feff4 commit 065bdcc

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

Libraries/AsyncStreams/AsyncStreams.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ void AsyncBuffersPool::unrefBuffer(AsyncBufferView::ID bufferID)
2727
switch (buffer->type)
2828
{
2929
case AsyncBufferView::Type::Writable: buffer->writableData = buffer->originalWritableData; break;
30-
case AsyncBufferView::Type::ReadOnly: *buffer = {}; break;
31-
case AsyncBufferView::Type::Growable: *buffer = {}; break;
30+
case AsyncBufferView::Type::ReadOnly: buffer->type = AsyncBufferView::Type::Empty; break;
31+
case AsyncBufferView::Type::Growable: buffer->type = AsyncBufferView::Type::Empty; break;
3232
case AsyncBufferView::Type::Empty: Assert::unreachable(); break;
3333
}
3434
}
@@ -78,6 +78,8 @@ Result AsyncBuffersPool::requestNewBuffer(size_t minimumSizeInBytes, AsyncBuffer
7878
{
7979
for (AsyncBufferView& buffer : buffers)
8080
{
81+
if (buffer.type == AsyncBufferView::Type::Empty)
82+
continue;
8183
if (buffer.refs == 0 and buffer.writableData.sizeInBytes() >= minimumSizeInBytes)
8284
{
8385
buffer.refs = 1;
@@ -151,6 +153,7 @@ Result AsyncBuffersPool::pushBuffer(AsyncBufferView&& buffer, AsyncBufferView::I
151153
{
152154
if (buffers[idx].getType() == AsyncBufferView::Type::Empty)
153155
{
156+
buffer.refs = 0;
154157
buffers[idx] = buffer;
155158
bufferID = AsyncBufferView::ID(static_cast<AsyncBufferView::ID::NumericType>(idx));
156159
return Result(true);

0 commit comments

Comments
 (0)