Skip to content

Commit 22feff4

Browse files
committed
AsyncStreams: Allow re-using streams after they've been stopped, ended or destroyed
1 parent 2d72fdb commit 22feff4

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

Libraries/AsyncStreams/AsyncStreams.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,8 @@ Result AsyncBuffersPool::pushBuffer(AsyncBufferView&& buffer, AsyncBufferView::I
165165

166166
Result AsyncReadableStream::init(AsyncBuffersPool& buffersPool, Span<Request> requests)
167167
{
168-
SC_TRY_MSG(state == State::Stopped, "Can init only in Stopped state")
168+
SC_TRY_MSG(state == State::Stopped or state == State::Destroyed or state == State::Ended,
169+
"AsyncReadableStream::init - Can be called only in Stopped / Destroyed / Ended state")
169170
buffers = &buffersPool;
170171
readQueue = requests;
171172
state = State::CanRead;
@@ -414,9 +415,14 @@ bool AsyncReadableStream::getBufferOrPause(size_t minumumSizeInBytes, AsyncBuffe
414415

415416
Result AsyncWritableStream::init(AsyncBuffersPool& buffersPool, Span<Request> requests)
416417
{
417-
SC_TRY_MSG(state == State::Stopped, "AsyncWritableStream::init - can only be called when stopped");
418+
SC_TRY_MSG(state == State::Stopped or state == State::Ended,
419+
"AsyncWritableStream::init - Can be called only in Stopped or Ended states");
418420
buffers = &buffersPool;
419421
writeQueue = requests;
422+
if (state == State::Ended)
423+
{
424+
state = State::Stopped;
425+
}
420426
return Result(true);
421427
}
422428

0 commit comments

Comments
 (0)