Re: [whatwg/streams] Assert no pending reads on release (#1168)

I've fixed `ReadableStreamCancel`, `ReadableStreamClose` and `ReadableStreamError` so they empty the list of read requests *before* calling the close/error steps. That does indeed fix the async iterator tests.

Piping was trickier, because there's interaction with "shutdown with an action". Specifically, when `preventCancel = false`, we don't want to wait for the read to complete *before* we call `ReadableStreamCancel`. I suggest we change it to:
1. Wait until all writes have finished.
2. Perform *action*, and wait for it to complete.
3. Wait until all reads and writes have finished.
4. Finalize, passing along any error from step 2.

This works perfectly, except for [this one test](https://github.com/web-platform-tests/wpt/blob/e1e713c842e54ea0a9410ddc988b63d0e1d31973/streams/piping/error-propagation-backward.any.js#L403-L419):
```javascript
promise_test(t => {

  const rs = recordingReadableStream();

  const ws = recordingWritableStream();

  const pipePromise = promise_rejects_exactly(t, error1, rs.pipeTo(ws, { preventCancel: true }),
                                              'pipeTo must reject with the same error');

  t.step_timeout(() => ws.controller.error(error1), 10);

  return pipePromise.then(() => {
    assert_array_equals(rs.eventsWithoutPulls, []);
    assert_array_equals(ws.events, []);
  });

}, 'Errors must be propagated backward: becomes errored after piping; preventCancel = true');
```
Because `preventCancel = true`, the pipe's read request never finishes, so it gets stuck. I believe this is the correct behavior though: we cannot cancel the stream, so we have to wait for the read to finish before we can safely release our reader.

I see two solutions:
* Change the test to somehow unblock the read request, e.g. by enqueuing a chunk on the readable after erroring the writable.
* Abort the read request without cancelling the stream, as suggested in #1103.

-- 
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/1168#issuecomment-932756142

Received on Saturday, 2 October 2021 13:55:34 UTC