- From: Mattias Buelens <notifications@github.com>
- Date: Sat, 23 Feb 2019 15:44:55 -0800
- To: whatwg/streams <streams@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/streams/pull/997/review/207129306@github.com>
MattiasBuelens commented on this pull request.
> @@ -592,6 +595,13 @@ function ReadableStreamTee(stream, cloneForBranch2) {
ReadableStreamDefaultControllerEnqueue(branch2._readableStreamController, value2);
}
});
+
+ // If pullPromise rejects with an AssertionError, but the branch is already closed or errored,
+ // the rejection will be silently ignored by ReadableStreamDefaultControllerError.
+ // We have to manually rethrow any AssertionError to make sure they are not ignored.
+ pullPromise.catch(rethrowAssertionErrorRejection);
Concretely: if the implementation has a bug that causes an assert failure in `ReadableStreamDefaultControllerClose` or `ReadableStreamDefaultControllerEnqueue`, this failure would be ignored if the branch was previously cancelled. This line ensures that an assert failure *always* causes an unhandled exception.
> @@ -592,6 +595,13 @@ function ReadableStreamTee(stream, cloneForBranch2) {
ReadableStreamDefaultControllerEnqueue(branch2._readableStreamController, value2);
}
});
+
+ // If pullPromise rejects with an AssertionError, but the branch is already closed or errored,
+ // the rejection will be silently ignored by ReadableStreamDefaultControllerError.
+ // We have to manually rethrow any AssertionError to make sure they are not ignored.
+ pullPromise.catch(rethrowAssertionErrorRejection);
+
+ return pullPromise;
Technically speaking, we could also just return `Promise.resolve()` here. We already have a `catch` handler on `reader._closedPromise` to error the branches when the original stream errors, so we don't really *need* to return any rejections from `pull()`. Then it would look more like:
```js
function pullAlgorithm() {
if (pulling === false) {
pulling = true;
ReadableStreamDefaultReaderRead(reader).then(result => {
pulling = false;
// ...
}).catch(rethrowAssertionErrorRejection);
}
return Promise.resolve();
}
```
Thoughts?
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/streams/pull/997#pullrequestreview-207129306
Received on Saturday, 23 February 2019 23:45:16 UTC