@@ -2201,6 +2201,14 @@ The following abstract operations operate on {{ReadableStream}} instances at a h
22012201 1. If |reader| [=implements=] {{ReadableStreamBYOBReader}} , perform
22022202 ! [$ReadableStreamBYOBReaderRelease$] (|reader|).
22032203 1. Otherwise, perform ! [$ReadableStreamDefaultReaderRelease$] (|reader|).
2204+ 1. Set |reader| to ! [$AcquireReadableStreamDefaultReader$] (|source|).
2205+ <p class="note"> The initial reader is released to ensure that any pending read requests
2206+ are immediately aborted, and no more chunks are pulled from |source|. A new reader is
2207+ acquired in order to keep |source| locked until the shutdown is [=finalized=] , for example
2208+ to [=cancel a readable stream|cancel=] |source| if necessary.
2209+ This exchange of readers is not observable to author code and the user agent is free to
2210+ implement this differently, for example by keeping the same reader and internally aborting
2211+ its pending read requests.
22042212 1. If |dest|.[=WritableStream/[[state]]=] is "`writable`" and !
22052213 [$WritableStreamCloseQueuedOrInFlight$] (|dest|) is false,
22062214 1. If any [=chunks=] have been read but not yet written, write them to |dest|.
@@ -2216,6 +2224,7 @@ The following abstract operations operate on {{ReadableStream}} instances at a h
22162224 1. If |reader| [=implements=] {{ReadableStreamBYOBReader}} , perform
22172225 ! [$ReadableStreamBYOBReaderRelease$] (|reader|).
22182226 1. Otherwise, perform ! [$ReadableStreamDefaultReaderRelease$] (|reader|).
2227+ 1. Set |reader| to ! [$AcquireReadableStreamDefaultReader$] (|source|).
22192228 1. If |dest|.[=WritableStream/[[state]]=] is "`writable`" and !
22202229 [$WritableStreamCloseQueuedOrInFlight$] (|dest|) is false,
22212230 1. If any [=chunks=] have been read but not yet written, write them to |dest|.
@@ -2224,8 +2233,10 @@ The following abstract operations operate on {{ReadableStream}} instances at a h
22242233 1. [=Finalize=] , passing along |error| if it was given.
22252234 * <dfn id="rs-pipeTo-finalize"><i>Finalize</i></dfn> : both forms of shutdown will eventually ask
22262235 to finalize, optionally with an error |error|, which means to perform the following steps:
2227- 1. Assert: |reader|.[=ReadableStreamGenericReader/[[stream]]=] is undefined.
22282236 1. Perform ! [$WritableStreamDefaultWriterRelease$] (|writer|).
2237+ 1. If |reader| [=implements=] {{ReadableStreamBYOBReader}} , perform
2238+ ! [$ReadableStreamBYOBReaderRelease$] (|reader|).
2239+ 1. Otherwise, perform ! [$ReadableStreamDefaultReaderRelease$] (|reader|).
22292240 1. If |signal| is not undefined, [=AbortSignal/remove=] |abortAlgorithm| from |signal|.
22302241 1. If |error| was given, [=reject=] |promise| with |error|.
22312242 1. Otherwise, [=resolve=] |promise| with undefined.
0 commit comments