@@ -189,12 +189,12 @@ void AsyncReadableStream::emitOnData()
189189 }
190190}
191191
192- void AsyncReadableStream::push (AsyncBufferView::ID bufferID, size_t newSize)
192+ bool AsyncReadableStream::push (AsyncBufferView::ID bufferID, size_t newSize)
193193{
194194 if (newSize == 0 )
195195 {
196196 emitError (Result::Error (" AsyncReadableStream::push zero sized buffer is not allowed" ));
197- return ;
197+ return false ;
198198 }
199199 // Push buffer to the queue
200200 buffers->setNewBufferSize (bufferID, newSize);
@@ -204,7 +204,7 @@ void AsyncReadableStream::push(AsyncBufferView::ID bufferID, size_t newSize)
204204 {
205205 state = State::Errored;
206206 emitError (Result::Error (" AsyncReadableStream::push dropping buffer" ));
207- return ;
207+ return false ;
208208 }
209209 buffers->refBuffer (bufferID); // 1a. unrefBuffer in emitOnData()
210210
@@ -219,7 +219,10 @@ void AsyncReadableStream::push(AsyncBufferView::ID bufferID, size_t newSize)
219219 case State::AsyncPushing:
220220 case State::AsyncReading: {
221221 emitOnData ();
222- state = State::AsyncPushing;
222+ if (state == State::AsyncReading)
223+ {
224+ state = State::AsyncPushing;
225+ }
223226 }
224227 break ;
225228 case State::Pausing: {
@@ -232,6 +235,7 @@ void AsyncReadableStream::push(AsyncBufferView::ID bufferID, size_t newSize)
232235 }
233236 break ;
234237 }
238+ return state == State::AsyncPushing or state == State::SyncPushing;
235239}
236240
237241void AsyncReadableStream::reactivate (bool doReactivate)
@@ -652,7 +656,8 @@ void AsyncTransformStream::afterProcess(Span<const char> inputAfter, Span<char>
652656 const size_t consumedOutput = outputData.sizeInBytes () - outputAfter.sizeInBytes ();
653657 if (consumedOutput > 0 )
654658 {
655- AsyncReadableStream::push (outputBufferID, consumedOutput);
659+ // Ignore whatever push returns because later on the stream is either finalizing or pausing either way
660+ (void )AsyncReadableStream::push (outputBufferID, consumedOutput);
656661 }
657662 AsyncReadableStream::getBuffersPool ().unrefBuffer (outputBufferID);
658663 if (inputAfter.empty ())
@@ -681,7 +686,8 @@ void AsyncTransformStream::afterFinalize(Span<char> outputAfter, bool streamEnde
681686 const size_t consumedOutput = outputData.sizeInBytes () - outputAfter.sizeInBytes ();
682687 if (consumedOutput > 0 )
683688 {
684- AsyncReadableStream::push (outputBufferID, consumedOutput);
689+ // Ignore whatever push returns because later on the stream is either finalizing or pausing either way
690+ (void )AsyncReadableStream::push (outputBufferID, consumedOutput);
685691 }
686692 AsyncReadableStream::getBuffersPool ().unrefBuffer (outputBufferID);
687693 if (streamEnded)
0 commit comments