Skip to content

Commit 6762cdb

Browse files
Fix cancelPromise in ReadableStreamTee being resolved twice (again)
Browsers were not handling this case correctly (i.e. ignoring the second resolve), as can be seen from web-platform-tests/wpt#28266.
1 parent 03bd01a commit 6762cdb

File tree

3 files changed

+5
-3
lines changed

3 files changed

+5
-3
lines changed

index.bs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2240,7 +2240,7 @@ create them does not matter.
22402240
[$ReadableStreamDefaultControllerClose$](|branch1|.[=ReadableStream/[[controller]]=]).
22412241
1. If |canceled2| is false, perform !
22422242
[$ReadableStreamDefaultControllerClose$](|branch2|.[=ReadableStream/[[controller]]=]).
2243-
1. [=Resolve=] |cancelPromise| with undefined.
2243+
1. If |canceled1| is false or |canceled2| is false, [=resolve=] |cancelPromise| with undefined.
22442244

22452245
: [=read request/error steps=]
22462246
::

reference-implementation/lib/abstract-ops/readable-streams.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,9 @@ function ReadableStreamTee(stream, cloneForBranch2) {
373373
if (canceled2 === false) {
374374
ReadableStreamDefaultControllerClose(branch2._controller);
375375
}
376-
resolvePromise(cancelPromise, undefined);
376+
if (canceled1 === false || canceled2 === false) {
377+
resolvePromise(cancelPromise, undefined);
378+
}
377379
},
378380
errorSteps: () => {
379381
reading = false;

0 commit comments

Comments
 (0)